JAVA中的正则表达式最多一个点

问题描述

| 我希望:
\\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\"
那么,如何使我的正则表达式起作用?     

解决方法

        问题在于,
\\b
在单词字符和非单词字符之间匹配,而不是您似乎正在尝试的在空格和非空格之间匹配。
.
0
之间的区别在于,
0
被视为\“ word \”字符,而
.
则不是。 因此,您的示例中发生的是这样的: 让我们取最后一个字符串
ab..
,看看
\\b
可以匹配的位置:
   a b . .
  ^ x ^ x x
请记住,
\\b
字符之间匹配。我已经说明了
\\b
可以与
^
匹配,而where4ѭ可以与
x
匹配。由于
\\b
只能匹配
a
之前或match18ѭ之后,因此我们只限于匹配
ab
,只要其中有那些
\\b
位即可。 我想你想要类似
\\bab\\.?(?!\\S)
的东西。那就是“单词边界,然后是
a
,然后是
b
,然后可能是单个点,紧随其后的是一个非空格字符。” 如果我误解了您的问题,并且您确实希望表达式在字符串
ab.c
中找到
ab.
或在
abc
中找到
ab
,则可以进行
\\bab\\.?(?!\\.)
    ,        
\\b([a-zA-Z]+\\.+)\\b
是\“至少一个字母后跟至少一个点 “ 30”是“至少一个字母后跟零个或一个点”