(1)反向引用:
其实,“小括号包含的表达式所匹配到的字符串” 不仅可以在匹配结束后可以使用,在匹配过程中也可以使用。表达式后边的部分,可以引用前面 “括号内的子匹配已经匹配到的字符串”。引用方法是 “\” 加上一个数字。“\1” 引用第1对括号内匹配到的字符串,“\2” 引用第2对括号内匹配到的字符串……以此类推,如果一对括号内包含另一对括号,则外层的括号先排序号。换句话说,哪一对的左括号 “(” 在前,那这一对就先排序号。 这种用法就叫“反向引用”
比如正则表达式<(\w+)>.*?</\1>中的\1表示,该处匹配第一个()中已经匹配的内容,该表达式可以用来校验<html>aa</html>等HTML标记是否配对,注意中间的.*?为非贪婪模式
(2)贪婪重复匹配模式
由此可见,“\w+” 在匹配的时候,总是尽可能多的匹配符合它规则的字符。虽然第二个举例中,它没有匹配最后一个 “d”,但那也是为了让整个表达式能够匹配成功。同理,带 “*” 和 “{m,n}” 的表达式都是尽可能地多匹配,带 “?" 的表达式在可匹配可不匹配的时候,也是尽可能的 "要匹配"。这 种匹配原则就叫作 "贪婪" 模式 。