Ответ 1
В таблице http://www.regular-expressions.info/refflavors.html.
Большинство основных элементов одинаковы, различия заключаются в следующем:
Незначительные отличия:
- Unicode escape-последовательности. В .NET это
\u200A
, в Perl это\x{200A}
. -
\v
в .NET - это только вертикальная вкладка (U + 000B), в Perl она обозначает класс "вертикальные пробелы". Из-за этого, конечно, есть\v
в Perl. - Условное выражение для именованной ссылки в .NET равно
(?(name)yes|no)
, но(?(<name>)yes|no)
в Perl.
Некоторые элементы Perl-only:
- Потенциальные кванторы (
x?+
,x*+
,x++
и т.д.). Вместо этого используйте подвыражение без обратного отслеживания ((?>…)
). - Именованная последовательность удаления unicode
\N{LATIN SMALL LETTER X}
,\N{U+200A}
. - Складывание и уход
-
\l
(нижний регистр следующий char),\u
(верхний регистр следующий char). -
\l
(нижний регистр),\u
(верхний регистр),\Q
(цитаты метасимволов) до\E
.
-
- Сокращенное обозначение для свойства Unicode
\pL
и\pL
. Вы должны включить фигурные скобки в .NET, например.\p{L}
. - Нечетные вещи, например
\X
,\C
. - Специальные классы символов, такие как
\v
,\v
,\h
,\h
,\N
,\R
- Обратная ссылка на конкретную или предыдущую группу
\g1
,\g{-1}
. Вы можете использовать абсолютный индекс группы в .NET. - Именованный backreference
\g{name}
. Вместо этого используйте\k<name>
. - Класс символов POSIX
[[:alpha:]]
. - Филиал < reset
(?|…)
-
\K
. Вместо этого используйте look-behind ((?<=…)
). - Утверждение оценки кода
(?{…})
, послепоказанное подвыражение(??{…})
. - Ссылка на подвыражение (рекурсивный рисунок)
(?0)
,(?R)
,(?1)
,(?-1)
,(?+1)
,(?&name)
. - Некоторые предикаты условного выражения зависят от Perl:
- code
(?{…})
- рекурсивный
(R)
,(R1)
,(R&name)
- define
(DEFINE)
.
- code
- Специальные глаголы управления Backtracking
(*VERB:ARG)
- Синтаксис Python
-
(?P<name>…)
. Вместо этого используйте(?<name>…)
. -
(?P=name)
. Вместо этого используйте\k<name>
. -
(?P>name)
. Нет эквивалента в .NET.
-
Некоторые элементы только .NET:
- Переменная длина. В Perl для позитивного поиска используйте
\K
вместо этого. - Произвольное регулярное выражение в условном выражении
(?(pattern)yes|no)
. - Вычитание класса символов (недокументированное?)
[a-z-[d-w]]
- Балансирующая группа
(?<-name>…)
. Это может быть смоделировано с утверждением оценки кода(?{…})
, за которым следует(?&name)
.
Литература: