【发布时间】:2021-11-06 01:40:42
【问题描述】:
以下返回真
Regex.IsMatch("FooBar\n", "^([A-Z]([a-z][A-Z]?)+)$");
也是这样
Regex.IsMatch("FooBar\n", "^[A-Z]([a-z][A-Z]?)+$");
RegEx 默认处于 SingleLine 模式,因此 $ 不应匹配 \n。 \n 不是允许的字符。
这是为了匹配单个 ASCII PascalCaseWord(是的,它将匹配尾随大写)
不适用于 RegexOptions.Multiline | 的任何组合正则表达式选项.单行
我做错了什么?
【问题讨论】:
-
在 Windows 上,换行符是 \r\n,而不是 \n。
-
是的,但 .NET 的 RegEx 实现与之匹配。出于某种奇怪的原因,请查看文档。
-
是的,你是对的,它将 \n 视为换行符,因此正则表达式仅检查“FooBar”,这就是它匹配的原因。不知道为什么它将 \n 视为新行,可能是为了增加与其他操作系统的兼容性...
-
不应该。正则表达式选项。多行字段命名空间:System.Text.RegularExpressions 程序集:System.Text.RegularExpressions.dll、System.dll、netstandard.dll 多行模式。更改 ^ 和 $ 的含义,使其分别匹配任何行的开头和结尾,而不仅仅是整个字符串的开头和结尾。有关详细信息,请参阅正则表达式选项主题中的“多行模式”部分。