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 reference of differences?
In . NET, regular expression patterns are defined by a special syntax or language, which is compatible with Perl 5 regular expressions and adds some additional features such as right-to-left matching. For more information, see Regular Expression Language - Quick Reference.
$1 equals the text " brown ".
Perl uses Perl regular expressions, not POSIX ones. You can compare the syntaxes yourself, for example in regex(7) .
A \w matches a single alphanumeric character (an alphabetic character, or a decimal digit) or _ , not a whole word. Use \w+ to match a string of Perl-identifier characters (which isn't the same as matching an English word).
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 (?(<name>)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<name>
instead.[[:alpha:]]
.(?|…)
\K
. Use look-behind ((?<=…)
) instead.(?{…})
, post-poned subexpression (??{…})
.(?0)
, (?R)
, (?1)
, (?-1)
, (?+1)
, (?&name)
. (?{…})
(R)
, (R1)
, (R&name)
(DEFINE)
. (*VERB:ARG)
(?P<name>…)
. Use (?<name>…)
instead.(?P=name)
. Use \k<name>
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:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With