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