我想删除以{{
开头并以}}
结尾的所有字符。我写了正则表达式:
String templatePattern = "\\{\\{.*?\\}\\}";
我用它:
text.replaceAll(templatePattern, "");
它适用于字符串:
{{Apple \n banana }}
它不起作用。如果我用空格字符替换所有\n
个字符,它就可以工作。什么是适当的解决方案?因为我也应该为\t
和其他人应用相同的东西。
答案 0 :(得分:6)
原因是,dot
匹配\n
以外的任何内容。如果您想匹配所有内容,则可以使用[\s\S]
或[\w\W]
或任何此类互补元字符的变体:
String templatePattern = "\\{\\{[\s\S]*?\\}\\}";
另一种方法是使用dot
标记使(?s)
与换行符实际匹配:
String templatePattern = "(?s)\\{\\{.*?\\}\\}";
后者确实是一种更好的方式。 (?s)
与Pattern.DOTALL
相同。