这个使用后向搜索一个HTML标记,而使用前向搜索对应的结束标记,这样,就能获得中间的文本而不包括两个标记。
评论
标点的另一个用法是使用“(?#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”。
*? 重复任意次数,但尽可能少 +? 匹配一次或多次,但尽可能少 ?? 重复零次或多次,但尽可能少 {n,m}? 重复最少n次,但不多于m次,但尽可能少 {n,}? 重复最少n次,但尽可能少
表5 懒惰量词
我们遗漏了什么?
我已经描述了很多元素,使用它们来开始创建正则表达式;但是我还遗漏了一些东西,它们在下面的表中归纳出来。这些中的很多都在项目文件中使用额外的
| 对此文章发表了评论 |

