0

在 JAVA 代码中使用以下正则表达式有什么问题:

    "(\\s[(]((\\w)*(\\s)*)*[)])"

这是为了替换字符串中的模式,例如“(foo bar foo bar)”。谢谢你。

4

1 回答 1

1

首先,测试正则表达式的最佳方法是使用正则表达式测试器

其次,获取Regex Cheat Sheet的副本会很有帮助

至于您的问题,因为括号是正则表达式中的保留字符,您需要使用 转义这些字符\,但在 Java 中,因为\是特殊字符,您必须转义两次 - 例如

\\(.*\\)

这将匹配两个括号之间的任何内容。

要将其限制为仅匹配单词字符和空格,您可以使用:

\\((?:[\\w]|[\\s])*\\)

为了解释这里发生了什么:

  • (.)*指示匹配与括号中的正则表达式匹配的任意数量的字符
  • (?:.)*因为括号意味着我们正在分组,所以我们补充?:说我们对组的内容不感兴趣
  • [\\w]|[\\s]指示匹配单词字符或空白字符
于 2012-05-24T19:42:03.007 回答