java中的正则表达式

时间:2011-05-11 09:41:38

标签: java regex

如何验证单点字符的表达式? 例如,如果我有一个表达式"trjb....fsf..ib.bi.",那么它应该只返回索引15和18处的点。如果我使用模式p=Pattern.compile("(\\.)+");我得到

4 ....
11 ..
15 .
18 .

4 个答案:

答案 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());
}

输入前面的额外空间有两件事:

  1. 允许将.检测为输入字符串的第一个字符
  2. matcher.start()偏移一个,以便对匹配的.
  3. 前面的字符进行说明

    结果是:

    15
    18
    

答案 2 :(得分:1)

你需要使用否定的外观。

Pattern.compile("(?<!\\.)\\.(?!\\.)");

这样的东西

答案 3 :(得分:0)

尝试

Pattern.compile("(?<=[^\\.])\\.(?=[^\\.])")

甚至更好......

Pattern.compile("(?<![\\.])\\.(?![\\.])")

这使用negative lookaround.

(?<![\\.]) =&gt; .

开头

\\. =&gt;一个.

(?![\\.]) =&gt; 后跟.