?在正则匹配表达式中表示匹配0-1次(作为匹配度)
?在正则中限定匹配度的匹配规则(即在匹配度符号之后)则表示lazy的含义——即懒惰匹配
有5中常用简单懒惰 ??(可以匹配0,1次,但最好是0次),*?(可以匹配任意次,但最好匹配0次),
+?(可以匹配1到n次,但最好匹配最开始的那1次)
,{n}?(可以匹配n次,最好就匹配最开始的前n次),{n,m}?(可以匹配n到m次,但最好只匹配最开始的前n次)
?和| 表示if ...else... (?(expression)yes-expression|no-expression),其中no-expression为可选项
(?(group-name)yes-expressioin|no-expression),其中no-expression为可选项
(?(A)A|B)不能匹配"AA",为什么呢?
.NET 正则表达式引擎尽可能的匹配多的字符(贪婪)。正是由于这一点,所以,不要用@"<.*>(.*)</.*>"这样的正则式来试图找出一个HTML文档中的所有innerText,而应当消除默认的贪婪改为懒惰匹配。<.+>.*?</\1>
.NET Framework 正则表达式引擎是回溯的正则表达式匹配器,它并入了传统的非确定性有限自动机 (NFA) 引擎(例如 Perl、Python使用的引擎)。这使其有别于更快的、但功能更有限的纯正则表达式确定性有限自动机 (DFA) 引擎。.NET Framework 正则表达式引擎尽量匹配成功,所以,当@"\w+\.(.*)\.\w+"中的.*把www. .csdn.net中的.csdn.net都匹配完了,让后面的\.\w+没得字符去匹配时,引擎会进行回溯,以得到成功的匹配。
"(;7-9)|(;([^>]*)[^;]*(?=7-9))?"
;1-2>1-3>1-4;7-6>7-7>7-8>7-9