想要匹配单词i.v.
不区分大小写
有图案
(?i)\bi\.v\.
但是想要一个单词边界,
上面的模式失败了,因为它匹配
ivx
但是如果我尝试在最后添加一个工作边界
(?i)\bi\.v\.\b
它的失败在于它甚至不匹配 iv 因为我认为它\b
正在吃字面。作为 。是断字
需要\.
贪心吗
我想匹配
sam iv sam
不想匹配
sam.iv
ivsam
这越来越近
(?i)\bi\.v\.\s$
但它无法在行尾找到 iv
\b
仅在字母数字字符和非字母数字字符(或字符串的开头/结尾)之间匹配。因此,它在 a 之后不匹配.
,除非字母数字字符紧跟该点。
如果您的意图是确保在点之后没有非空白字符,那么您可以指定使用否定的前瞻断言:
(?i)\bi\.v\.(?!\S)
(?!\S)
表示“断言下一个字符不是非空白字符”。
这听起来有点令人费解——为什么要双重否定?为什么不(?=\s)
表示“断言下一个字符是空白字符”?嗯,有一个微妙的区别:第二个版本需要一个空白字符。这意味着正则表达式将无法匹配字符串的末尾。第一个正则表达式也处理那个极端情况。
如果您通常希望“单词边界”的概念表示“空格分隔”,那么您还需要替换第一个\b
:
(?i)(?<!\S)i\.v\.(?!\S)
或者正则表达式将匹配sam.i.v.
您似乎不想要的。
关于您当前的正则表达式:
您不需要\b
在 dot 之后,因为 dot 不被视为单词字符,但当然 dot 需要转义:
(?i)\bi\.v\.
但是您确实需要\b
先i
确保它不匹配,例如hi
编辑:(根据您的进一步编辑)
试试这个正则表达式:
(?i)\bi\.v\.(?=\s|$)
您似乎对单词边界和贪婪的概念感到非常困惑。你能做的最好的事情就是去这些地址:
http://www.regular-expressions.info/repeat.html
http://www.regular-expressions.info/wordboundaries.html
当您阅读这些解释时,我相信您会认为您的问题很荒谬。