Делает REGEX, отличаются от PHP до Python

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

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

с уважением,

13
задан Community 23 May 2017 в 11:46
поделиться

6 ответов

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

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

10
ответ дан 1 December 2019 в 21:51
поделиться

По большей части они совместимы. Однако есть некоторые различия, помимо разного синтаксиса ( / 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. Поиск назад может иметь конечную длину в PCRE, а в Python - фиксированную длину.
  10. Отсутствует шаблон \ G (местоположение предыдущего совпадения).
  11. В Python нет условного сопоставления, только в PCRE: (? (? = Regex) then | else) .
  12. Нет \ x1234 для сопоставления кодовых точек Unicode в Python. Нет p {L} и другого сопоставления свойств Unicode. В PHP это зависит от того, как он настроен / скомпилирован.
  13. Нет [: alpha:] Классы символов POSIX в Python.

Собрано с regular-expressions.info , опуская некоторые из более эзотерических вещей. Но не много.

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

10
ответ дан 1 December 2019 в 21:51
поделиться

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

http://re.dabase.com/

Будьте здоровы!

1
ответ дан 1 December 2019 в 21:51
поделиться

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

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

1
ответ дан 1 December 2019 в 21:51
поделиться

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

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

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

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

1
ответ дан 1 December 2019 в 21:51
поделиться

После очень быстрого исследования я выяснил, что основное различие заключается в следующем:

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

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

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

REGEX # no surrounding by any characters
1
ответ дан 1 December 2019 в 21:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: