如何验证单点字符的表达式?
例如,如果我有一个表达式"trjb....fsf..ib.bi."
,那么它应该只返回索引15和18处的点。如果我使用模式p=Pattern.compile("(\\.)+");
我得到
4 ....
11 ..
15 .
18 .
答案 0 :(得分:2)
在字符串的开头和结尾添加一个空格,然后使用模式
"[^\\.]\\.[^\\.]"
答案 1 :(得分:2)
这似乎可以解决问题:
String input = "trjb....fsf..ib.bi.";
Pattern pattern = Pattern.compile("[^\\.]\\.([^\\.]|$)");
Matcher matcher = pattern.matcher(" " + input);
while (matcher.find()) {
System.out.println(matcher.start());
}
输入前面的额外空间有两件事:
.
检测为输入字符串的第一个字符matcher.start()
偏移一个,以便对匹配的.
结果是:
15
18
答案 2 :(得分:1)
你需要使用否定的外观。
像Pattern.compile("(?<!\\.)\\.(?!\\.)");
答案 3 :(得分:0)
尝试
Pattern.compile("(?<=[^\\.])\\.(?=[^\\.])")
甚至更好......
Pattern.compile("(?<![\\.])\\.(?![\\.])")
(?<![\\.])
=&gt; 不以.
\\.
=&gt;一个.
(?![\\.])
=&gt; 不后跟.