到现在为止我用过这个:
"(?s).*\\(.*\\).*\\{.*\\}.*\\;.*"
我在完整请求中应用它(所以是多行)。 问题是,当我在(){}之间有新行时,它也匹配;这是我不想要的。我想要匹配的是(){};对于此表达式中的任何字符(新行除外),新行应仅在此表达式之前和之后匹配。
那么有没有办法只指定一个特定点,它应该与新行匹配?
答案 0 :(得分:3)
插入(?-s)
,在点之前关闭DOTALL,然后再使用其他(?s)
重新打开:
"(?s).*\\(.*\\).*\\{(?-s).*\\}(?s).*\\;.*"
或者更好,暂时只为表达式关闭它(感谢@nhahtdh这个伟大的建议!):
"(?s).*\\(.*\\).*\\{(?-s:.*)\\}.*\\;.*"
答案 1 :(得分:2)
您只需删除?s
:
".*\\(.*\\).*\\{.*\\}.*\\;.*"
否则使用否定:
"(?s).*\\([^\\n]*\\).*\\{[^\\n]*\\}.*\\;.*"