Ошибка PHP RegExpr Unkown modifier '('

У меня есть это регулярное выражение:

([http://some.url.com/index.php?showtopic=\"]*)([0-9]+(?:\.[0-9]*)?) 

его для извлечения ссылок на темы из форума

Теперь, когда я использую его в своем скрипте

 $url = "([http://some.url.com/index.php?showtopic=\"]*)([0-9]+(?:\.[0-9]*)?)"; 

preg_match_all spits: "Неизвестный модификатор" ('"

Это также вызов preg_match

 preg_match_all($url, $str, $matches,PREG_OFFSET_CAPTURE,3); 

Может ли кто-нибудь помочь мне с этой, очевидно, глупой проблемой

Solutions Collecting From Web of "Ошибка PHP RegExpr Unkown modifier '('"

PCRE требует разделителей, которые отделяют фактическое регулярное выражение от необязательных модификаторов . С помощью PHP вы можете использовать любые символы, отличные от буквенно-числового, без обратного слэша, без пробелов и даже разделители, которые попадают в пары (скобки).

В вашем случае ведущий ( используется как разделитель и первое соответствующее закрытие ) обозначает конец регулярного выражения; остальные рассматриваются как модификаторы:

 ([http://some.url.com/index.php?showtopic=\"]*)([0-9]+(?:\.[0-9]*)?) ^ ^ 

Но первый символ после конечного разделителя ( ( ) не является допустимым модификатором. Поэтому сообщение об ошибке сообщает Неизвестный модификатор ' ( ' .

В большинстве случаев / используется как разделитель, как в Perl. Но это потребовало бы избежать каждого появления / в регулярном выражении. Таким образом, это хороший выбор для выбора разделителя, который не находится в регулярном выражении. В вашем случае вы можете использовать # например, предложенный BoltClock.

О, и кстати: класс символов, такой как [http://some.url.com/index.php?showtopic=\"] представляет собой только один символ перечисленных символов. Таким образом, либо h , t , p [http://some.url.com/index.php?showtopic=\"] , / и т. д. Если вы хотите выразить http://some.url.com/index.php?showtopic=" буквально, используйте только http://some\.url\.com/index\.php\?showtopic=" (не забудьте избежать метасимволов).

Вам нужно обернуть свое регулярное выражение в разделители. Любой персонаж, который не является особым метасимволом PCRE, будет работать, поэтому я буду использовать # :

 $url = "#([http://some.url.com/index.php?showtopic=\"]*)([0-9]+(?:\.[0-9]*)?)#"; 

Вы можете узнать больше о разделителях в разделе руководства PHP для разделителей PCRE .