| nbsp; # 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 懒惰量词 我们遗漏了什么?
我已经描述了很多元素,使用它们来开始创建正则表达式;但是我还遗漏了一些东西,它们在下面的表中归纳出来。这些中的很多都在项目文件中使用额外的例子说明了。例子编号在这个表的左列中列出。
\a
报警字符
\b
通常是单词边界,但是在一个字符集合中它表示退格键
\t
制表符
34
\r
回车
\v
垂直制表符
\f
分页符
35
\n
换行符
\e
ESC
36
\nnn
ASCII码八进制数为nnn的字符
37
\xnn
十六进制数为nn的字符
38
\unnnn
Unicode码为nnnn的字符
39
\cN&nbs 上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页 |