I have some useful regular expressions in Perl. Is there a simple way to translate them to .NET\'s dialect of regular expressions?
If not, is there a concise referen
There is a big comparison table in http://www.regular-expressions.info/refflavors.html.
Most of the basic elements are the same, the differences are:
Minor differences:
\u200A
, in Perl it is \x{200A}
.\v
in .NET is just the vertical tab (U+000B), in Perl it stands for the "vertical whitespace" class. Of course there is \V
in Perl because of this.(?(name)yes|no)
, but (?()yes|no)
in Perl. Some elements are Perl-only:
x?+
, x*+
, x++
etc). Use non-backtracking subexpression ((?>…)
) instead.\N{LATIN SMALL LETTER X}
, \N{U+200A}
.\l
(lower case next char), \u
(upper case next char).\L
(lower case), \U
(upper case), \Q
(quote meta characters) until \E
.\pL
and \PL
. You have to include the braces in .NET e.g. \p{L}
.\X
, \C
.\v
, \V
, \h
, \H
, \N
, \R
\g1
, \g{-1}
. You can only use absolute group index in .NET.\g{name}
. Use \k
instead.[[:alpha:]]
.(?|…)
\K
. Use look-behind ((?<=…)
) instead.(?{…})
, post-poned subexpression (??{…})
.(?0)
, (?R)
, (?1)
, (?-1)
, (?+1)
, (?&name)
. (?{…})
(R)
, (R1)
, (R&name)
(DEFINE)
. (*VERB:ARG)
(?P…)
. Use (?…)
instead.(?P=name)
. Use \k
instead.(?P>name)
. No equivalent in .NET.Some elements are .NET only:
\K
instead.(?(pattern)yes|no)
.[a-z-[d-w]]
(?<-name>…)
. This could be simulated with code evaluation assertion (?{…})
followed by a (?&name)
.References: