Php и Python регулярное выражение разницы? - PullRequest
2 голосов
/ 26 мая 2010

Мне нужно разобрать строку 'Open URN: 100000 LA: ' и получить из нее 100000. на python регулярное выражение (?<=Open URN: )[0-9]+(?= LA:) работает нормально, но в php выдает следующую ошибку:

preg_match(): Unknown modifier '['

Мне нужен работающий php, поэтому, пожалуйста, помогите мне решить эту проблему и расскажите о различиях в регулярных выражениях python и php.

Ответы [ 2 ]

3 голосов
/ 26 мая 2010

Вы должны использовать разделители , когда используете Регулярные выражения, совместимые с 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.

1 голос
/ 21 марта 2011

Кроме упомянутых различий я нашел еще одну. re.match (r "\ s", "a b") в python с preg_match ("/ \ s /", "a b"), первый не возвращает совпадений в python, а второй найдет символ пробела Я не понял, почему в официальных документах это трудно понять, но это факт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...