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