Java正则表达式对字符不起作用\ n \ n

时间:2014-02-24 17:40:53

标签: java regex

我想删除以{{开头并以}}结尾的所有字符。我写了正则表达式:

String templatePattern = "\\{\\{.*?\\}\\}";

我用它:

text.replaceAll(templatePattern, "");

它适用于字符串:

{{Apple \n banana }}

它不起作用。如果我用空格字符替换所有\n个字符,它就可以工作。什么是适当的解决方案?因为我也应该为\t和其他人应用相同的东西。

1 个答案:

答案 0 :(得分:6)

原因是,dot匹配\n以外的任何内容。如果您想匹配所有内容,则可以使用[\s\S][\w\W]或任何此类互补元字符的变体:

String templatePattern = "\\{\\{[\s\S]*?\\}\\}";

另一种方法是使用dot标记使(?s)与换行符实际匹配:

String templatePattern = "(?s)\\{\\{.*?\\}\\}";

后者确实是一种更好的方式。 (?s)Pattern.DOTALL相同。