Java正则表达式dotall

时间:2015-01-29 09:38:07

标签: java regex

到现在为止我用过这个:

"(?s).*\\(.*\\).*\\{.*\\}.*\\;.*"

我在完整请求中应用它(所以是多行)。 问题是,当我在(){}之间有新行时,它也匹配;这是我不想要的。我想要匹配的是(){};对于此表达式中的任何字符(新行除外),新行应仅在此表达式之前和之后匹配。

那么有没有办法只指定一个特定点,它应该与新行匹配?

2 个答案:

答案 0 :(得分:3)

插入(?-s),在点之前关闭DOTALL,然后再使用其他(?s)重新打开:

"(?s).*\\(.*\\).*\\{(?-s).*\\}(?s).*\\;.*"

或者更好,暂时只为表达式关闭它(感谢@nhahtdh这个伟大的建议!):

"(?s).*\\(.*\\).*\\{(?-s:.*)\\}.*\\;.*"

答案 1 :(得分:2)

您只需删除?s

即可
".*\\(.*\\).*\\{.*\\}.*\\;.*"

否则使用否定:

"(?s).*\\([^\\n]*\\).*\\{[^\\n]*\\}.*\\;.*"