標點的另一個用法是使用“(?#comment)”語法包含評論。一個更好的辦法是設置“Ignore Pattern Whitespace”選項,它允許空白字符插入表達式然後當使用表達式時忽略它。設置了這個選項之後,任何文本每行末尾在數字符號“#”後面的東西都被忽略。例如,我們可以格式化先前的例子如下:
31. Text between Html tags, with comments
(?<= # Search for a prefix, but exclude it
<(\w+)> # Match a tag of alphanumerics within angle brackets
) # End the prefix
.* # Match any text
(?= # Search for a suffix, but exclude it
<\/\1> # Match the previously captured tag preceded by "/"
) # End the suffix
貪婪與懶惰
當一個正則表達式有一個可以接受一個重復次數范圍的量詞(像“.*”),正常的行為是匹配盡可能多的字符。考慮下面的正則表達式:
32. a.*b -- The longest string starting with a and ending with b
如果這被用來搜索字符串“aabab”,它會匹配整個字符串“aabab”。這被稱為“貪婪”匹配。有些時候,我們更喜歡“懶惰”匹配,其中一個匹配使用發現的最小數目的重復。表2中所有的量詞可以增加一個問號“?”來轉換到“懶惰”量詞。這樣,“*?”的意思就是“匹配任何數目的匹配,但是使用達到一個成功匹配的最小數目的重復”。現在讓我們試試懶惰版本的例子(32):
33. a.*?b -- The shortest string starting with a and ending with b
如果我們把這個應用到相同的字符串“aabab”,它會先匹配“aab”然後匹配“ab”。
*? 重復任意次數,但盡可能少 +? 匹配一次或多次,但盡可能少 ?? 重復零次或多次,