除了了解为什么这个特定的正则表达式不能按预期工作之外,我并不想完成任何事情:
/\bty(?!t)\b/i
预期比赛:
根据我对负向后查找的理解,它应该匹配后面不跟有某些内容的内容,这里我想匹配 tyX (X 可以是任何字符),只要 X 不是“t”。
应匹配:
tya
不应匹配:
tyt
使用否定集可以轻松解决这个问题,但我不明白为什么否定前瞻不起作用。
根据我对负向后查找的理解,它应该匹配后面不跟有某些内容的内容,这里我想匹配 tyX (X 可以是任何字符),只要 X 不是“t”。
(?!t)
不是负面的看背后,而是负面的看前方。您在问题中进一步说得对。(?!t)
断言该位置没有 t
,而不移动当前位置。\bty(?!t)\b
无法匹配 tyX
,因为您的正则表达式需要在 \b
之后有 ty
立即。此模式中没有提供第三个字符。
\b
断言下一个字符不是字母数字,它已经排除了“t”,因此您的正则表达式实际上与 \bty\b
执行相同的操作,因此只有单词 ty
可以匹配(不区分大小写) ).要提供更长的单词,您应该在
\w*
之后添加 ty
。要排除以“t”结尾的单词,您可以使用否定外观behind,以便断言匹配的最后一个字符不是“t”:
\bty\w*(?<!t)\b
这将匹配以下所有内容:
ty
typ
type
typical
tyranny
typesetting
它不会匹配:
typeset
tyrant
typist
typescript
typologist