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="
(не забудьте экранировать мета-символы) .