Java Regex匹配一个特殊字符,除非它在括号内

时间:2014-10-22 17:34:27

标签: java regex match

给出以下字符串:

foo().bar(norf.qux).fubar()

我想用点分割它,除非它们在括号内,输出为:

foo()
bar(norf.qux)
fubar()

这可能吗?

2 个答案:

答案 0 :(得分:1)

将输入字符串拆分为未括在括号内的点。

\.(?![^()]*\))

在Java中,表示此正则表达式的字符串将是

"\\.(?![^()]*\\))"

DEMO

String[] tok = s.split("\\.(?![^()]*\\))");
System.out.println(Arrays.toString(tok));

<强>输出:

[foo(), bar(norf.qux), fubar()]

模式说明:

\.                       '.'
(?!                      look ahead to see if there is not:
  [^()]*                   any character except: '(', ')' (0 or
                           more times)
  \)                       ')'
)                        end of look-ahead

答案 1 :(得分:1)

您可以使用这样的简单正则表达式:

\B\.

<强> Working demo

enter image description here