Является ли синтаксис для написания регулярных выражений стандартизированным - PullRequest
3 голосов
/ 10 марта 2010

Стандартизован ли синтаксис написания регулярных выражений? То есть, если я напишу регулярное выражение на C ++, оно будет работать на Python или Javascript без каких-либо изменений.

Ответы [ 3 ]

8 голосов
/ 10 марта 2010

Нет, существует несколько диалектов регулярных выражений.

Они обычно имеют много общих элементов.

Некоторые популярные из них перечислены и сравнены здесь .

0 голосов
/ 10 марта 2010

Нет, вот некоторые различия, которые приходят на ум:

  • JavaScript позволяет писать встроенное регулярное выражение (где \ в \s не нужно экранировать как \\s), которые разделены символом /. Вы можете указать флаги после закрытия /. JS также имеет конструктор RegExp, который принимает экранированную строку в качестве первого аргумента и необязательную строку флага в качестве второго аргумента.

    /^\w+$/i и new RegExp("^\\w+$", "i") действительны и одинаковы.

  • В PHP вы можете заключить строку регулярного выражения в произвольный разделитель по вашему выбору (хотя и не уверены в суперсимволе символов, который можно использовать в качестве разделителей). Снова вы должны избежать обратной косой черты здесь.

    "|[0-9]+|" совпадает с #[0-9]+#

  • Python и C # поддерживают необработанные строки (не ограничиваясь регулярными выражениями, но действительно полезные для написания регулярных выражений), которые позволяют записывать обратные косые черты без экранирования в регулярное выражение.

    "\\d+\\s+\\w+" можно записать как r'\d+\s+\w+' в Python и @'\d+\s+\w+' в C #

  • Разделители, такие как \<, \A и т. Д., Не поддерживаются во всем мире.

  • JavaScript не поддерживает внешний вид и флаг DOTALL.
0 голосов
/ 10 марта 2010

Простые регулярные выражения, в основном да. Однако во всем спектре языков программирования есть различия.

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