我有一个正则表达式来检查脚本语言中的有效标识符。它们以字母或下划线开头,后跟0个或更多字母,下划线,数字和$符号。但是,如果我打电话
Util.IsValidIdentifier( "hello\n" );
它返回true。我的正则表达式是
const string IDENTIFIER_REGEX = @"^[A-Za-z_][A-Za-z0-9_\$]*$";
那么“\ n”如何通过?
答案 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_$]*$";
由于您正在测试一行中的变量名称,因此可以使用$
作为字符串的结尾。