Вычитание класса символов Regex с отрицательными группами - PullRequest
1 голос
/ 25 января 2012

Этот вопрос относится к вычитанию класса символов в регулярном выражении (регулярное выражение). Я имею в виду регулярное выражение второй редакции XPATH 2.0.

Если в вычитании класса символов есть отрицательные группы, возникает ли раньше оператор вычитания (-)? или после оператора отрицательной группы (^)?

Ниже приведен текст спецификации схемы XPATH / XML. Но, на мой взгляд, это звучит неоднозначно.

Для любой · группы положительных символов · или · группы отрицательных символов · G, и любое · выражение класса символов · C, G-C является допустимым · символом вычитание класса ·, идентифицирующее множество всех символов в C (G), которые также не в C (C).

Чтобы быть более конкретным, рассмотрим следующие три регулярных выражения:

  1. [^ abc- [объявления]]
  2. [^ а - [^ объявление]]
  3. [а - [^ объявление]]

сопоставляется с текстом стога сена:

  • ABCDEF

Каковы возможные тексты совпадений (первый и последующие)?

1 Ответ

2 голосов
/ 25 января 2012

Я не думаю, что текст неоднозначен, если мы достаточно мягки, чтобы прочитать G-C как [G-[C]], а отрицательную группу ^G, как [^G]. Теперь становится ясно, что каретка является частью первой группы и не отменяет обе группы.

Следовательно, [^abc-[ad]] будет соответствовать:

{Все символы кроме a, b и c} \ {a и d} = {Все символы кроме a, b, c и d} ​​

Имейте в виду, вы можете легко проверить поведение :).
В качестве бонуса регулярные выражения .Net также поддерживают эту функцию, что упрощает тестирование онлайн .
См. Также: Вычитание класса символов

...