我希望:\b([a-zA-Z]+\.?)\b or \b([a-zA-Z]+\.{0,1})\b
可以至少一个字母,最多一个点。
但匹配器发现“ab”的输入为“ab”“ab”。和“ab ..”我希望它能做到以下几点:
"ab" is found for input "ab"
"ab." is found for input "ab."
nothing is found for input "ab.."
如果我将正则表达式替换为0而不是点,例如\b([a-zA-Z]+0?)\b
比预期更有效:
"ab" is found for input "ab"
"ab0" is found for input "ab0"
nothing is found for input "ab00"
那么,我如何让我的正则表达式工作?
答案 0 :(得分:5)
问题是\b
在单词字符和非单词字符之间匹配,而不是在您尝试的空白和非空白之间。 .
和0
之间的区别在于0
被视为“字”字符,但.
不是。
所以你的例子中发生了什么:
我们取最后一个字符串ab..
并查看\b
可以匹配的位置:
a b . .
^ x ^ x x
请记住,\b
匹配字符。我已经显示了\b
与^
匹配的位置,以及x
无法匹配的位置。由于\b
只能在a
之前或b
之后匹配,因此只要您拥有ab
位,我们就只能匹配\b
在那里。
我认为你想要像\bab\.?(?!\S)
这样的东西。那说“单词边界,然后a
然后b
然后可能是一个点,紧接着没有非空格字符。”
如果我误解了您的问题,并且您确实希望表达式在字符串ab.
中找到ab.c
或在ab
中找到abc
,您可以\bab\.?(?!\.)
1}}
答案 1 :(得分:0)
\b([a-zA-Z]+\.+)\b
是“至少一个字母,后跟至少一个点\b([a-zA-Z]+\.{0,1})\b
是“至少一个字母后跟零或一个点