Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式在括号内匹配特殊字符excpet_Java_Regex_Match - Fatal编程技术网

Java正则表达式在括号内匹配特殊字符excpet

Java正则表达式在括号内匹配特殊字符excpet,java,regex,match,Java,Regex,Match,给定以下字符串: foo().bar(norf.qux).fubar() 我想用点分开,除非它们在括号内,输出是: foo() bar(norf.qux) fubar() 这可能吗?将输入字符串按未包含在括号内的点拆分 \.(?![^()]*\)) 在Java中,表示这个正则表达式的字符串是 "\\.(?![^()]*\\))" 输出: [foo(), bar(norf.qux), fubar()] \. '.' (?!

给定以下字符串:

foo().bar(norf.qux).fubar()
我想用点分开,除非它们在括号内,输出是:

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

这可能吗?

将输入字符串按未包含在括号内的点拆分

\.(?![^()]*\))
在Java中,表示这个正则表达式的字符串是

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

输出:

[foo(), bar(norf.qux), fubar()]
\.                       '.'
(?!                      look ahead to see if there is not:
  [^()]*                   any character except: '(', ')' (0 or
                           more times)
  \)                       ')'
)                        end of look-ahead
图案说明:

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

您可以使用如下简单的正则表达式:

\B\.


“这可能吗?”,但如果可以无限嵌套这样的表达式,则不要在此处使用正则表达式。编写自己的解析器。一个基本问题:你能嵌套括号吗?换句话说,类似于
foo().bar(norf.qux()).fubar()
foo().bar(norf.qux(buz.whatever()).fubar()
的东西可能吗?谢谢,这是我要找的第二个表达式!您不需要在
[^()]*
中查找
,但我担心OP正在查找正则表达式,它将根据
是否不在括号内,而不是是否在
之后进行拆分。在这种情况下,我们可以在
(?@Pshemo是的,我同意你的观点,但我只是发布了答案,因为OP示例文本。这个简单的正则表达式适用于他的示例,可能对他有用。没关系,我不是OP,所以我无法确定你的答案是否错误。我只是发布了我的评论,以添加关于你答案假设的信息:)谢谢,也很有帮助。这适合我目前的场景,但我担心将来我会看到这个
foo().bar(norf.qux).fubar().bar(norf.qux)
,输出将是
foo().bar(norf.qux)fubar().bar(norf.qux)
不是预期的,但谢谢;)嗨@Lucas,谢谢你的评论。只是想让你知道,它也适用于你提到的例子