Project

General

Profile

Scripting Regex » History » Revision 36

Revision 35 (Per Amundsen, 01/16/2017 07:12 AM) → Revision 36/60 (Per Amundsen, 07/01/2017 02:44 PM)

{{>toc}} 

 h1. Regular Expressions 

 As of 2.9 AdiIRC has built-in support for PCRE2 expressions provided that "Visual C++ 2015 (x86)":https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe is installed for 32 bit AdiIRC or "Visual C++ 2015 (x64)":https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe is installed for 64 bit AdiIRC. 

 AdiIRC will automatically use PCRE2 if available, although it can be disabled by typing [[/setoption]] Misc UsePcre False, in this case AdiIRC will fallback to .NET regular expressions. 

 AdiIRC uses the .NET regular expression engine, while mIRC uses the PCRE engine, some differences are converted from PCRE to .NET while others are not possible. 

 Exploring ways to use PCRE 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 PCRE 

 AdiIRC translate some patterns from PCRE 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 have no .NET counterpart: 

 code (?{…}) 
 recursive (R), (R1), (R&name) 
 define (DEFINE). 

 List of differences between .NET and PCRE https://stackoverflow.com/questions/3417644/translate-perl-regular-expressions-to-net