|
本帖最后由 gbgbxgb 于 2020-2-7 17:56 编辑
正则表达式:
Pattern="cat"
目标文本:
He captured a catfish for his cat
结论:正则表达式”cat”,并不是匹配”单词cat”.它的本质意义是首先匹配一个字符”c”,紧接着一个字符”a”,再接着一个字符”t”的这样一个字符串.(你能用前面所学知识,只匹配目标文本的最后单词”cat”吗?)
+++++++++分界线+++++++++++++++++++++++
上述文字基本上引用自您51楼的描述。其中,您设置了一个题让阅读者自行完成(如后文所述)。我的疑问是您的本意是让阅读者写出如下的正则式1、正则式2或正则式3,还是再难点的类似正则式4的正则式:
你能用前面所学知识,只匹配目标文本的最后单词”cat”吗?
正则式1:
Pattern="\bcat$"
正则式2:
Pattern="\bcat\b"
正则式3(较土):
Pattern="\bcat\b$"
正则式4(紧扣您的“只匹配目标文本的最后单词‘cat’”的文字描述,譬如目标文本:He captured a catfish for his cat and the cat which is others.):
Pattern="\b(cat)\b(?!.*?\b\1\b)"
或
Pattern="\b(cat)\b(?!.*\b\1\b)"
顺带再写个只匹配倒数第2个“cat”的正则式,若存在不足,请您指正:
Pattern="\b(cat)\b(?!(.*?\b\1\b){2,})(?=.*?\b\1\b)"
或
Pattern="\b(cat)\b(?!(.*\b\1\b){2,})(?=.*\b\1\b)"
关于引用,即\1,经实践,发现其引用时不包括\b定界符,故把前述的正则式4写成如下形式是错误的,您能否给些见解:
Pattern="(\bcat\b)(?!.*?\1)"
所以,正确的写法必须写成前文那样或者写成无多大意义(极易产生误导)的这样:
Pattern="(\bcat\b)(?!.*?\b\1\b)"
结论:使用引用时必须注意该引用所引用的真正内容范围,而非想当然误写的正则式的表面形式内容,形如本跟帖所说的误写形式:(\bcat\b)。
|
|