正则表达奇怪

时间:2013-06-27 16:11:06

标签: c# regex

我有一个正则表达式来检查脚本语言中的有效标识符。它们以字母或下划线开头,后跟0个或更多字母,下划线,数字和$符号。但是,如果我打电话

Util.IsValidIdentifier( "hello\n" );

它返回true。我的正则表达式是

const string IDENTIFIER_REGEX = @"^[A-Za-z_][A-Za-z0-9_\$]*$";

那么“\ n”如何通过?

3 个答案:

答案 0 :(得分:5)

$匹配行尾。您需要使用\z来匹配文本的结尾以及RegexOptions.Multiline。您可能还希望使用\A代替^来匹配文本的开头,而不是该行的匹配。

此外,您无需转义字符类中的$

答案 1 :(得分:1)

因为$是一个有效的元字符,这意味着字符串的结尾(或行的结尾,就在换行符之前)。来自msdn:

  

$:匹配必须发生在字符串的末尾,或者在行或字符串末尾的\ n之前。

您应该将其转义:\$(如果您想匹配字符串的末尾,请添加\z。)

答案 2 :(得分:0)

您的true结果为hello\n因为您不需要转义字符类中的$,因此反斜杠是匹配的,因为您有反斜杠(视为字面值) )在角色类里面。

试试这个:

const string IDENTIFIER_REGEX = @"^[A-Za-z_][A-Za-z0-9_$]*$";

由于您正在测试一行中的变量名称,因此可以使用$作为字符串的结尾。

相关问题