Я нашел это сообщение: Python Regex по сравнению с Regex PHP, но я на самом деле не добирался, если синтаксис REGEX Python соответствует синтаксису REGEX PHP.
Я начал преобразовывать часть своего старого кода PHP к Python (из-за appengine g и т.д.), и теперь я хотел бы знать, является ли regex 100%-м кабриолетом простой копией и вставкой.
с уважением,
Python использует синтаксис, похожий на синтаксис Perl, а PHP использует Perl Compatible Regular Expressions синтаксис, поэтому все должно быть почти одинаково. Читайте о возможных различиях.
Единственное реальное отличие заключается в том, что в PHP выражение должно быть заключено в разделители.
По большей части они совместимы. Однако есть некоторые различия, помимо разного синтаксиса ( / regex /
в PHP против re.compile (r «regex»)
в Python):
\ Q ... E
, чтобы избежать метасимволов, Python - нет. \ cA- \ cZ
, а Python - нет. [\ d-z]
или [a- \ d]
является литералом в PHP, а не в Python. \ z
(конец строки), Python - нет, только \ Z
(конец строки перед необязательным окончанием перевода строки). \ b
будет соответствовать границам слов только вокруг символов ASCII в PCRE, в Python он может соответствовать в зависимости от языкового стандарта, если этот параметр установлен. \ 1
и т. Д. Обратным ссылкам перед захватывающими скобками в PCRE, но не в Python. (? - s)
и т. Д.) В Python. (?> ...)
или притяжательные кванторы (. ++
) в Python, только в PCRE. \ G
(местоположение предыдущего совпадения). (? (? = Regex) then | else)
. \ x1234
для сопоставления кодовых точек Unicode в Python. Нет p {L}
и другого сопоставления свойств Unicode. В PHP это зависит от того, как он настроен / скомпилирован. [: alpha:]
Классы символов POSIX в Python. Собрано с regular-expressions.info , опуская некоторые из более эзотерических вещей. Но не много.
Мораль: купите RegexBuddy и используйте его для перевода регулярных выражений за вас.
Не уверен в правильности ответа, но я нашел хороший инструмент, который поможет вам в тестировании.
Будьте здоровы!
Я считаю, что они, по крайней мере, в основном совместимы, т.е. > 2/3. С обеих сторон могут быть некоторые расширения, специфичные для языка, но ядро определенно одно и то же. Это утверждение основано исключительно на моем (ограниченном) личном опыте, так что воспринимайте его с долей соли.
Обе реализации основаны на регексах Perl, если я не ошибаюсь.
Механизмы регулярных выражений, встроенные в различные языки, обычно имеют различия, даже если общий синтаксис одинаков. PHP имеет несколько встроенных механизмов регулярных выражений (POSIX и PCRE), поэтому в зависимости от того, какие функции регулярных выражений вы используете, будет зависеть от того, насколько хорошо они будут преобразованы.
Если вы в основном использовали функции preg_*
, то они должны в основном преобразовываться без проблем, однако я считаю, что в реализации регулярных выражений python отсутствуют некоторые более продвинутые функции, которые включены в реализацию PHP.
Вы можете прочитать о регулярных выражениях PHP здесь и регулярных выражениях Python здесь и выяснить некоторые более конкретные вещи.
Хороший вопрос, но сложно дать полный ответ, так как переменных очень много.
После очень быстрого исследования я выяснил, что основное различие заключается в следующем:
PHP (имеет разделители)
/ REGEX / # "/" in front and at the end
Python (не имеет разделителей)
REGEX # no surrounding by any characters