今天在写算法题的时候碰到的一个这样的正则表达式
<([A-Z]{1,9})>[^<]*</\1>在翻看了多次正则表达式的匹配规则后终于弄明白了
对 <DIV>This is the first line -</DIV> 这个字符串匹配,可以匹配到这整个字符串
[A-Z]{1-9}很简单,就是匹配大写字母1-9次,即匹配一个1-9大小的大写字母字符串,外边加个()也很容易理解,就是获得括号中匹配到的字符串
(pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到。要匹配圆括号字符,请使用 '\(' 或 '\)'。
所以<([A-Z]{1,9})>就是匹配到<DIV>,
[^<]*即匹配不包含“<”的任意字符
[^xyz] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'、'l'、'i'、'n'。
而“\1”则是根据这个规则来匹配即“\1”在这里匹配了前边括号中获得的匹配“DIV” (pattern)会生成一个Matches 集合
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。