Scripting Regex » History » Revision 33
Revision 32 (Per Amundsen, 01/30/2016 01:33 AM) → Revision 33/60 (Per Amundsen, 11/17/2016 07:43 AM)
{{>toc}}
h1. Regular Expressions
AdiIRC uses the .NET regular expression engine, while mIRC uses the PRCE engine, some differences are converted from PRCE to .NET while others are not possible.
Exploring ways to use PRCE in .NET is on TODO.
Read more about .NET regular expressions:
http://regexhero.net/reference/
https://msdn.microsoft.com/en-us/library/hs600312%28v=vs.110%29.aspx
https://msdn.microsoft.com/en-us/library/az24scfc%28v=vs.110%29.aspx
http://www.regular-expressions.info/dotnet.html
h1. Modifiers
.NET does not use a /pattern/modifier syntax, but AdiIRC tries to interpret it and remove them from the pattern.
/g /G - Enables global match.
/i /I - Enables case in-sensitive.
/S - Strips any [[Formatting_Text|control codes]] before matching ([[$hfind]] will ignore this).
/s - Enables single line match.
/m /M /c /C - Enables multi line match.
/x /X - Eliminates unescaped white space from the pattern.
/U - Enables non greedy mode. (Tries to replace greedy patterns with non greedy patterns + > +?, * -> *?)
<notextile>/u - Enables UTF8 instead of ASCII regular expression.</notextile>
h1. Differences between .NET and PRCE
AdiIRC translate some patterns from PRCE into .NET patterns.
<notextile>(*UTF8)/(*UTF) -> Enables UTF8 instead of ASCII regular expression.</notextile>
<notextile>(?R) -> .*</notextile>
<notextile>(?2) -> .*</notextile>
<notextile>(?1) -> .*</notextile>
<notextile>++ -> +</notextile>
<notextile>[:alnum:] -> a-zA-Z0-9</notextile>
<notextile>[:alpha:] -> a-zA-Z</notextile>
<notextile>[:ascii:] -> \x00-\x7F</notextile>
<notextile>[:blank:] -> \s\t</notextile>
<notextile>[:cntrl:] -> \x00-\x1F\x7F</notextile>
<notextile>[:digit:] -> 0-9</notextile>
<notextile>[:graph:] -> \x21-\x7E</notextile>
<notextile>[:lower:] -> a-z</notextile>
<notextile>[:print:] -> \x20-\x7E</notextile>
<notextile>[:punct:] -> !"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~</notextile>
<notextile>[:space:] -> \s\t\r\n\v\f</notextile>
<notextile>[:upper:] -> A-Z</notextile>
<notextile>[:word:] - > A-Za-z0-9_</notextile>
<notextile>[:xdigit:] -> A-Fa-f0-9</notextile>
<notextile>\cc -> \x003</notextile>
<notextile>\co -> \x00F</notextile>
<notextile>\cb -> \x002</notextile>
<notextile>\x\{([A-Fa-f0-9]{1,4})\} -> \uXXXX</notextile>
<notextile>\Q \E tries to escapes all characters in between</notextile>
\K is not available in .NET, use (<=abc)d instead.
These are not available and have no .NET counterpart:
code (?{…})
recursive (R), (R1), (R&name)
define (DEFINE).
List of differences between .NET and PRCE https://stackoverflow.com/questions/3417644/translate-perl-regular-expressions-to-net