首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

问四个正则表达式要如何理解,答案都已经给出,不知道为什么

2012-02-01 
问四个正则表达式要怎么理解,答案都已经给出,不知道为什么举例1:表达式(\w)((?\1\1\1)(\1))+ 在匹配字

问四个正则表达式要怎么理解,答案都已经给出,不知道为什么
举例1:表达式   "(\w)((?=\1\1\1)(\1))+ "   在匹配字符串   "aaa   ffffff   999999999 "   时,将可以匹配6个 "f "的前4个,可以匹配9个 "9 "的前7个。这个表达式可以读解成:重复4次以上的字母数字,则匹配其剩下最后2位之前的部分

  举例2:表达式   ".\b. "   在匹配   "@@@abc "   时,匹配结果是:成功;匹配到的内容是: "@a ";匹配到的位置是:开始于2,结束于4。

    举例3:表达式   "\bend\b "   在匹配   "weekend,endfor,end "   时,匹配结果是:成功;匹配到的内容是: "end ";匹配到的位置是:开始于15,结束于18。

  举例4:表达式   "(? <=\d{4})\d+(?=\d{4}) "   在匹配   "1234567890123456 "   时,将匹配除了前4个数字和后4个数字之外的中间8个数字。

[解决办法]
第二个,\b --匹配一个单词边界,也就是单词和空格之间的位置。
不匹配任何字符它不代表任何符号只是个标志(能够把单词与空格等其他符号区分),所以可以提取单词,标志单词的开始或者结束。
对于第二个例子就可以看出,它是提取单词所以就会把其它符号与单词分隔开,当然,只能是 "@a“结果,左边是非单词符号,右边就是单词
第三个例子就代表一个单词的开头和结束,可以从一个字符串中将但单词提取出来,这个例子可以理解为是和”, "分离出来的完整单词
"(? <=\d{4})”是从开始检测到4个连续数字开始(不包括这4个)
“(?=\d{4}) "是检测到4个数字为结束(不包括这四个字符 )
这样按照最大的来检测该字符串,符合这个条件的,所以取中间剩下的连续数字
第一个我再看看

[解决办法]
看我的博客帖子里2条最重要的规则

http://blog.joycode.com/saucer/archive/2006/10/11/84963.aspx

1。(\w)((?=\1\1\1)(\1))+

((?=\1\1\1)(\1))是说,匹配跟前面第一个括号里的字符一样的字符,但只有这个字符后面还会重复2次,才算匹配。当匹配计算移到ffffff中第一个f时,只有第二,三,四个f才符合这样的条件,因为“+”是贪婪的,所以,整个匹配包括前四个f。同理,到999999999中的第一9时,第二到7个9才符合这样的条件,所以,整个匹配包括前7个9。

2。.\b是说匹配单词的边界(word boundary)前一个字符,“@@@abc”的单词边界在第一个@前面,a前面,c后面,匹配结果是,a前面的那个@,还有c

3。\bend\b是说,这个end前后都有词的边界,只有字符串最后的end才符合这样的条件

4。(? <=\d{4})\d+(?=\d{4})是说,这个子字符串都是数字,而且前面有4个数字,后面也有4个数字,在匹配计算移动到前4个数字时,都不满足这样的条件,当移动到5时,可以看出,“6789012”都满足这样的条件(因为它们后面都有4个数字),但到后面那个3时,就不满足条件了,因为“+”是贪婪的,所以,整个匹配结果是“56789012”

热点排行