这个正则表达式在JAVA中使用有什么问题?

时间:2012-05-24 19:21:37

标签: java regex

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

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

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

1 个答案:

答案 0 :(得分:1)

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

其次,获取Regex Cheat Sheet

的副本会很有帮助

关于你的问题,因为括号是Regex中的保留字符,你需要使用\来转义这些字符,但是在Java中,因为\是一个特殊字符,你必须逃避它两次 - 例如

\\(.*\\)

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

要将其限制为只匹配您可以使用的字词和空格:

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

要解释这里发生了什么:

  • (.)*指示匹配与parantheses中的正则表达式匹配的任意数量的字符
  • (?:.)*由于parantheses意味着我们正在进行分组,因此我们添加?:表示我们对该群组的内容不感兴趣
  • [\\w]|[\\s]指示匹配单词字符或空白字符