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