Отличается ли REGEX от PHP до Python - PullRequest
12 голосов
/ 18 июня 2010

Я нашел этот пост: Python Regex против PHP Regex , но я на самом деле не получил, если синтаксис Python REGEX совпадает с синтаксисом PHP REGEX.

Я начал преобразовывать часть своего старого кода PHPв python (из-за приложения g и т. д.), и теперь я хотел бы знать, можно ли преобразовать регулярное выражение на 100%, просто скопировав и вставив.

С уважением,

Ответы [ 6 ]

10 голосов
/ 18 июня 2010

Они совместимы по большей части. Однако есть некоторые различия, за исключением разного синтаксиса (/regex/ в PHP и re.compile(r"regex") в Python):

  1. PCRE поддерживает \Q...E для экранирования метасимволов, Python - нет.
  2. PCRE поддерживает \cA-\cZ контроль соответствия символов, Python - нет.
  3. Дефис в [\d-z] или [a-\d] - это литерал в PHP, а не в Python.
  4. PCRE поддерживает \z (конец строки), Python - нет, только \Z (конец строки до необязательного финального перевода строки).
  5. \b будет соответствовать границам слов только вокруг символов ASCII в PCRE, в Python он может соответствовать в зависимости от локали, если опция установлена.
  6. Вы можете ссылаться на \1 и т. Д. Обратные ссылки перед их захватом скобок в PCRE, а в Python - нет.
  7. Вы не можете отключить модификаторы режима в регулярном выражении ((?-s) и т. Д.) В Python.
  8. Вы не получаете атомную группировку (?>...) или собственнические квантификаторы (.++) в Python, только в PCRE.
  9. Lookbehind может быть конечной длины в PCRE, должно быть фиксированной длины в Python.
  10. Нет шаблона \G (местоположение предыдущего совпадения).
  11. Нет условного соответствия в Python, только в PCRE: (?(?=regex)then|else).
  12. Нет \x1234 для сопоставления кодовых точек Unicode в Python. Нет p{L} и других совпадений свойств Unicode, либо. В PHP это зависит от того, как он настроен / скомпилирован.
  13. Нет [:alpha:] Классы символов POSIX в Python.

Взято из регулярно-экспрессион.инфо , оставляя без внимания некоторые более эзотерические вещи. Но не сильно.

Мораль: купите RegexBuddy и используйте его для перевода регулярных выражений для вас.

10 голосов
/ 18 июня 2010

Python использует синтаксис, аналогичный синтаксису Perl, а PHP использует синтаксис , совместимый с Perl , поэтому он должен быть почти таким же.Прочитайте о возможных различиях .

Единственное реальное отличие состоит в том, что в PHP выражение должно быть заключено в разделители .

1 голос
/ 18 июня 2010

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

Если вы в основном использовали preg_* функции, то они должны в основном преобразовываться без проблем, однако я считаю, что в реализации регулярных выражений на python отсутствуют некоторые более продвинутые функции, включенные в реализацию PHP.

Вы можете прочитать о регулярных выражениях PHP здесь и Регулярные выражения Python здесь и выяснить некоторые более конкретные вещи.

Хороший вопрос, но трудно дать полный ответ, так как есть много переменных.

1 голос
/ 18 июня 2010

После очень быстрого исследования я обнаружил, что главное отличие:

PHP (имеет разделители)

/ REGEX / # "/" in front and at the end

Python (без разделителей)

REGEX # no surrounding by any characters
1 голос
/ 18 июня 2010

Не уверен в правильном ответе, но я нашел хороший инструмент, который поможет с вашим тестированием.

http://re.dabase.com/

ура!

1 голос
/ 18 июня 2010

Я считаю, что они, по крайней мере, в основном совместимы, то есть> 2/3.Может быть несколько специфичных для языка расширений с обеих сторон, но ядро ​​определенно одинаково.Это утверждение основано исключительно на моем (ограниченном) личном опыте, поэтому возьмите его с собой.

Обе реализации основаны на регулярных выражениях Perl, если я не ошибаюсь.

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