为什么 [.\r\n]* 正则表达式不能匹配所有内容?

4
.*

是...的缩写/简称

[^\r\n]*

所以,如果我们将它们结合起来
[.\r\n]*

为什么我们不能得到一个可以匹配世界上每个字符串的正则表达式呢?

3
不清楚c#实现,但通常正则表达式中方括号内的.表示只匹配.字符,而不包括其他字符。在Windows创建的文件中,字符串仅以\r\n作为终止符。 - alko
是的,我测试过了,它不起作用。 - foxneZz
@alko 那应该是一个答案 :-) - Ian Roberts
1个回答

7

和正则表达式中的大多数特殊字符一样,当.出现在字符类中时,它代表一个字面上的.字符。如果你想匹配所有字符,常见的技巧是使用类似以下的内容:

[\s\S]*

另外,您可以使用RegexOptions.Singleline来指定.匹配所有字符,并仅使用:

.*

例如:

var input = "foo\r\nbar";
var match = Regex.Match(input, ".*", RegexOptions.Singleline);
Assert.AreEqual(input, match.Value);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接