识别转义字符问题的正则表达式
Regex to identify escaped characters issue
假设我们有以下字符串:
@"Hello m\u00e9 name is Mat\u00bfQu"
我正在使用正则表达式:
private static readonly Regex ESCAPING_REGEX = new Regex("\+[^\"][a-zA-Z0-9]*", RegexOptions.Compiled);
但是,这个正则表达式似乎 return 没有任何匹配项:
MatchCollection matches = ESCAPING_REGEX.Matches(text);
// matches.Count == 0
我在 Regex101 上尝试了正则表达式,它确实 return 我正在寻找的两个匹配项。
如何修复我的正则表达式以实现预期的行为? (很高兴接受任何改进建议。)
您的正则表达式声明有误,因为您需要文字 +
位于匹配项的开头。看看你的正则表达式对于正则表达式引擎来说是什么样的:
\+
- 匹配文字 +
[^"]
- 匹配 "
以外的任何字符
[a-zA-Z0-9]*
- 匹配 0 个或多个数字或拉丁字母字符。
如果您使用逐字字符串文字来创建正则表达式,例如
Regex.Matches(str, @"\+[^""][a-zA-Z0-9]*");
你会得到 2 场比赛。逐字字符串文字中的 \
将匹配文字 \
,而 +
将被视为量词。
实际上,您甚至不需要 +
(因为它会匹配 \\
)和 [^""]
(除非 "
紧跟在 \
而这不是你想要匹配的),你可以使用
@"\[a-zA-Z0-9]+"
匹配您的子字符串(\
匹配 \
,[a-zA-Z0-9]+
将匹配范围内的 1 个或多个字符)。
假设我们有以下字符串:
@"Hello m\u00e9 name is Mat\u00bfQu"
我正在使用正则表达式:
private static readonly Regex ESCAPING_REGEX = new Regex("\+[^\"][a-zA-Z0-9]*", RegexOptions.Compiled);
但是,这个正则表达式似乎 return 没有任何匹配项:
MatchCollection matches = ESCAPING_REGEX.Matches(text);
// matches.Count == 0
我在 Regex101 上尝试了正则表达式,它确实 return 我正在寻找的两个匹配项。
如何修复我的正则表达式以实现预期的行为? (很高兴接受任何改进建议。)
您的正则表达式声明有误,因为您需要文字 +
位于匹配项的开头。看看你的正则表达式对于正则表达式引擎来说是什么样的:
\+
- 匹配文字+
[^"]
- 匹配"
以外的任何字符
[a-zA-Z0-9]*
- 匹配 0 个或多个数字或拉丁字母字符。
如果您使用逐字字符串文字来创建正则表达式,例如
Regex.Matches(str, @"\+[^""][a-zA-Z0-9]*");
你会得到 2 场比赛。逐字字符串文字中的 \
将匹配文字 \
,而 +
将被视为量词。
实际上,您甚至不需要 +
(因为它会匹配 \\
)和 [^""]
(除非 "
紧跟在 \
而这不是你想要匹配的),你可以使用
@"\[a-zA-Z0-9]+"
匹配您的子字符串(\
匹配 \
,[a-zA-Z0-9]+
将匹配范围内的 1 个或多个字符)。