在JAVA代码中使用以下正则表达式有什么错误:
"(\\s[(]((\\w)*(\\s)*)*[)])"
这是替换字符串中的模式,例如“(foo bar foo bar)”。 谢谢。
答案 0 :(得分:1)
首先,测试正则表达式的最佳方法是使用Regex Tester
其次,获取Regex Cheat Sheet
的副本会很有帮助关于你的问题,因为括号是Regex中的保留字符,你需要使用\
来转义这些字符,但是在Java中,因为\
是一个特殊字符,你必须逃避它两次 - 例如
\\(.*\\)
这将匹配两个括号之间的任何内容。
要将其限制为只匹配您可以使用的字词和空格:
\\((?:[\\w]|[\\s])*\\)
要解释这里发生了什么:
(.)*
指示匹配与parantheses中的正则表达式匹配的任意数量的字符(?:.)*
由于parantheses意味着我们正在进行分组,因此我们添加?:
表示我们对该群组的内容不感兴趣[\\w]|[\\s]
指示匹配单词字符或空白字符