打印本文 打印本文 关闭窗口 关闭窗口
Regular Expression心得体会
作者:武汉SEO闵涛  文章来源:敏韬网  点击数3644  更新时间:2009/4/25 0:44:42  文章录入:mintao  责任编辑:mintao

 

Expresso提供了一个功能,它可以将所下的RE变成树状的说明,一组组的分开说明,提供了一个好的除错环境。其它的功能,如部分符合(Partial Match只查找反白RE的部分)及除外符合(Exclude Match只不查找反白RE的部分)就留给各位大大试试啰。

当次描述用括号群组起来时,符合次描述的文字可用在之后的程序处理或RE本身。在预设的情型下,所符合的群组是由数字命名,由1开始,由顺序是由左至右,这自动群组命名,可在Expresso中的skeleton viewresult view中看到。

Backreference是用来查找群组中抓取的符合文字所相同的文字。举例来说”\1”所指符合群组1所抓取的文字。

20. \b(\w+)\b\s*\1\b (寻找重复字,此处说的重复是指同样的字,中间有空白隔开如dog dog这样的字)
(\w+)
会抓取至少一个字符的字母或数字的字,并将它命名为群组1,之后是查找任意空格符,再接和群组1相同的文字。

如果不喜欢群组自动命名的1,也可以自行命名,以上述例子为例,(\w+)改写为(?<Word>\w+),这就是将所抓取的群组命名为WordBackreference就要改写成为\k<Word>

21. \b(?<Word>\w+)\b\s*\k<Word>\b (使用自行命名群组抓取重复字)

使用括号还有许多特别的语法元素,比较通用的列表如下:
抓取(Captures) 
(exp) 
符合exp并抓取它进自动命名的群组
(?<name>exp) 
符合exp并抓取它进命名的群组name
(?:exp) 
符合exp,不抓取它
Lookarounds 
(?=exp) 
符合字尾为exp的文字
(?<=exp) 
符合前缀为exp的文字
(?!exp) 
符合后面没接exp字尾的文字
(?<!exp) 
符合前面没接exp前缀的文字
批注Comment 
(?#comment) 
批注

Positive Lookaround
接下来要谈的是lookaheadlookbehind assertions。它们所查找的是目前符合之前或之后的文字,并不包含目前符合本身。这些就如同”^””\b”特殊字符,本身并不会对应任何文字(用来界定位置),也因此称做是zero-width assertions,看些例子也许会清楚些。

(?=exp)是一个”zero-width positive lookahead assertion”。它指的就是符合字尾为exp的文字,但不包含exp本身。
22. \b\w+(?=ing\b) (
字尾为ing的字,比如说filling所符合的就是fill)
(?<=exp)
是一个”zero-width positive lookbehind assertion”。它指的就是符合前缀为exp的文字,但不包含exp本身。
23. (?<=\bre)\w+\b (
前缀为re的字,比如说repeated所符合的就是peated)
24. (?<=\d)\d{3}\b (
在字尾的三位数字,且之前接一位数字)
25. (?<=\s)\w+(?=\s) (
由空格符分隔开的字母数字字符串)

 

Negative Lookaround
之前有提到,如何查找一个非特定或非在特定群组的字符。但如果只是要验证某字符不存在而不要对应这些字符进来呢?举个例子来说,假设要查找一个字,它的字母里有q但接下来的字母不是u,可以用下列的RE来做。

26. \b\w*q[^u]\w*\b (一个字,其字母里有q但接下来的字母不是u)
这样的RE会有一个问题,因为[^u]要对应一个字符,所以若q是字的最后一个字母,[^u]这样的下法就会将空格符对应下去

上一页  [1] [2] [3] [4] [5] [6]  下一页

打印本文 打印本文 关闭窗口 关闭窗口