还是本人给你个满意的解释吧:
说实话,我思考了一天方想出答案。很久前曾参考过守柔老大的帖子:http://club.excelhome.net/thread-449578-3-1.html
当前这个帖子中并未解释你的这个问题。这个帖子只是介绍到了{}代表着贪婪模式,而@代表最小模式。
"{1,}"中的最大匹配项数为255,即前一个字符或者表达式的至少1次最多255次的匹配;而"@"没有限制(极限目前未知)。
在表达式无后限制时,"{1,}"是贪婪匹配,而"@"是最小匹配。如"1234567890”文本中查找"[0-9]{1,}"时,它返回所有匹配项(1234567890),而查找"[0-9]@"时,它返回"1",它是最小限度匹配。 而你的疑问,是,为何^13([!^13]{35})[。!?”…]时能查找到下面的句子,而^13([!^13]{35,37})[。!?”…]却找不到了。
“安静一点。”卓巧丽不耐烦的推顶她一下。“待会儿忙完了,妈妈再带你回家。 其实是这样:{}代表贪婪模式,一旦后面附加了{35,37}的范围,则在查找时^13([!^13]{35,37})部分就直接将后面的句号包含在内了。所以后面的[。!?”…]部分就什么也匹配不到了。 更容易理解的例子: 一二三四关键词一二三四 在查找上面这句时,若使用[!^13]@关键词[!^13]@时,查找到的为一二三四关键词一 也就是说满足@时,长度为1就OK了。不会再继续向后查找。 若使用[!^13]@关键词[!^13]{1,},则可查找到全句。 但是,若修改成这样:[!^13]{1,}关键词[!^13]{1,},则什么也找不到。原因就在于前面的[!^13]{1,}部分已经贪婪的匹配了全句一二三四关键词一二三四,故后面的“关键词”这三个字已经找不到匹配的目标了,导致什么也找不到。 至于LZ的问题,其实个人认为若是想要随心所欲的控制匹配的数量,还是要借助于VBA的。 word本身通配符虽然很强大,几乎堪比正则表达式,但是毕竟不是真正的正则表达式。然而若联合VBA的话,就和真正的正则不相上下了。
|