Вы должны использовать разделители , когда используете Регулярные выражения, совместимые с Perl (PCRE) в PHP (к которым preg_match()
принадлежит).
Из документации :
При использовании функций PCRE требуется, чтобы шаблон был заключен в разделители . Разделителем может быть любой не алфавитно-цифровой символ без обратной косой черты, без пробела.
Причина использования разделителей заключается в том, что вы можете добавить модификаторы шаблона после последнего разделителя, например, сделать регистр без учета регистра:
#[a-z]#i // # is the delimiter.
Вернуться к вашей проблеме:
В вашем случае PHP считает, что скобки ()
- это ваши разделители (да, открывающие и закрывающие скобки являются допустимыми разделителями, см. Документацию ), а ?<=Open URN:
- ваш шаблон. Затем он встречает [
и обрабатывает его как модификатор шаблона , но он недопустим.
Ваш шаблон с разделителем %
:
preg_match('%(?<=Open URN: )[0-9]+(?= LA:)%', 'Open URN: 100000 LA: ');
В документации preg_match()
имеется множество примеров.
Python против PHP
Единственное, что я нашел относительно регулярных выражений в Python, это то, что Синтаксис Perl используется , но я не знаю, поддерживается ли полный синтаксис.
Как уже упоминалось, PHP использует PCRE. Описание различий между PCRE и регулярным выражением Perl.