Стандарты RegEx на разных языках

Я задаю этот вопрос, потому что замечаю, что есть несколько незначительных различий в синтаксисе RegEx между разными языками. Мне интересно, есть ли стандарт RegEx, который поддерживается где-то? И если да, где я могу найти этот документ. Кроме того, если я создаю выражение RegEx в .NET, это же выражение гарантированно совместимо на 100% и работает с другими языками, такими как Perl или Javascript или Java? Наконец, есть ли "лучшие практики", когда дело доходит до использования RegEx, что может помочь сделать его более удобным для обслуживания на других языках платформы?

Ответ 1

Одним из старейших наборов стандартизованных регулярных выражений являются POSIX BRE (основные регулярные выражения) и ERE (расширенные регулярные выражения), документированные под Регулярные выражения.

Другие языки могут определять свои собственные стандарты. Например, С++ 2011 имеет библиотеку регулярных выражений, определенную в разделе 28 (около 46 страниц стандарта). Perl определяет его регулярные выражения. Другие языки заимствуют из этих источников и других. Lex и Flex используют собственный набор регулярных выражений. Сед использует свой вариант для регулярных выражений. И Java, JavaScript и... определяют свои собственные версии, иногда используя PCRE (Perl-совместимые регулярные выражения) в качестве основы для их дизайн. Некоторые детали зависят от возможностей, предоставляемых языком, на котором используются регулярные выражения.

Книга Джеффа Фридля Освоение регулярных выражений охватывает множество различных наборов регулярных выражений, определяющих, что общего и что отличное.

Ответ 2

Нет такого стандарта. Конечно, есть PCRE, POSIX BRE, POSIX ERE,...

Но на самом деле будут "небольшие" различия на любом языке. Вы можете передавать самые простые вещи для большинства ароматов, например, . для любого символа или квантификаторов +*?, классы символов также распространены, но он уже начинается с предопределенных классов, таких как \w, поддерживается ли вообще? или ASCII или Unicode?

Хорошей помощью здесь является сравнение вкуса на regular-expressions.info от Ян Гойваертс.

Ответ 3

Лучшие практики

Избегайте использования positive-negative lookbehinds, а в некоторых случаях lookaheads