这个正则表达式(每个\的额外\是因为它在java代码中
\\*\\{[\\w\\W]*\\}\\*
实际是
\*\{[\w\W]*\}\*
但是这个表达在} *方面并不贪心。我正在尝试匹配 {和} 之间的所有内容,所以如果我有
*{ some comment }* hi there and some stuff *{ comment 2 }* and soe more stuff
应该以
结束hi there and some stuff and soe more stuff
但相反,它不够贪心。这里有关于贪婪的信息,我想我想要那里的X1
\\*\\{[\\w\\W]*\\}1\\* or \\*\\{[\\w\\W]*\\}{1}\\*
但这不起作用。在这个例子中,如何使用他们的X {n}来强迫贪婪?
答案 0 :(得分:4)
将ReplaceAll替换为正则表达式,但添加?
,以便[\ w \ W]不会贪婪,如下所示:
String yourString = "*{ some comment }* hi there and some stuff *{ comment 2 }* and soe more stuff";
yourString.replaceAll("\\*\\{[\\w\\W]*?\\}\\*","");
然后你会得到hi there and some stuff and soe more stuff
答案 1 :(得分:2)
尝试这样的事情:
\*\{((?!\}\*).)*\}\*
或者以Java形式:
\\*\\{((?!\\}\\*).)*\\}\\*
它使用negative lookahead来区分}*
结束标记与}
。这是((?!\}\*).)*
部分。
编辑:这是一个允许换行的(Java)版本。您还可以使用Pattern.DOTALL使.
包含换行符,以便上述模式生效。
\\*\\{((?!\\}\\*)[\\s\\S])*\\}\\*
请注意,这不会是递归的。你不能拥有*{ foo *{ bar }* }*
这样的东西,并将整个事情视为评论。这将使这成为一个无上下文的语法,trying to parse CFGs is among the most famous no-nos with regex。