Стандартов нет, но если ваша цель - максимальная переносимость, вам следует придерживаться функций, поддерживаемых регулярными выражениями JavaScript. Все остальные основные разновидности поддерживают все, что делает JS, с небольшими изменениями здесь и там. Например, некоторые поддерживают только нотацию класса символов POSIX ([:alpha:]
), в то время как другие используют синтаксис Unicode (\p{Alpha}
).
Вероятно, наиболее проблемные варианты - это те, которые влияют на точку (.
) и якоря (^
и $
). Например, JavaScript не имеет режима DOTALL (или «однострочный»), поэтому для сопоставления с чем угодно , включая символ новой строки , необходимо использовать хак, например [\s\S]
. Между тем, в Ruby есть режим DOTALL, но он называется многострочным режимом - то, что каждый else называет «многострочным» (^
и $
как якоря строк), - это то, как Ruby всегда работает .
Также следует учитывать, что точка не совпадает (в режиме по умолчанию). Традиционно это был просто перевод строки (\n
), но все больше и больше вкусов принимают (или, по крайней мере, приближаются) к руководству Unicode относительно разделителей строк. Например, в Java точка не соответствует ни одному из [\r\n\u0085\u2028\u2029]
, тогда как ^
и $
обрабатывают \r\n
как один разделитель и не будут совпадать между двумя символами.
Обратите внимание, что я говорю только о производных от Perl разновидностях, таких как Python, Ruby, PHP, JavaScript и т. Д. Не имеет смысла включать GNU или POSIX-основанные разновидности, такие как grep, awk и MySQL; у них, как правило, меньше функций, но это не то, для чего вы бы их выбрали.
Я также не включаю разновидность XML-схемы; он намного более ограничен, чем JavaScript, но это специализированное приложение. Например, он не поддерживает якоря (^
, $
, \A
, \Z
и т. Д.), Поскольку совпадения всегда привязываются с обоих концов.