我希望匹配字符串中的变量,这些变量使用美元符号$
进行寻址。但是,我的正则表达式不匹配转义后的美元符号后的字符序列(例如,使用反斜杠\$
进行转义)。
如果使用另一个(\\
)转义反斜杠,则当然应匹配以下变量。
TL; DR :任何序列$xxxxx
应匹配,仅,如果它遵循偶数反斜杠\
(0,2) ,4,6,......)。反斜杠本身应该不成为捕获组的一部分。
我目前有以下表达式:(?:[^\\]*(\\{2})*)(\$[a-z_]\w*\b)
,
但它在以下文本中无效(当然使用选项\igm
):
Hello $var, this is a backslash followed by a dollar: \\\$
$test \$escaped \\$not_escaped \\\$escaped_again \\\\$you_get_the_idea
匹配的“变量”应为$var
,$test
,$not_escaped
和$you_get_the_idea
。
但是,https://regex101.com会显示其他匹配项。
我无法理解错误。
答案 0 :(得分:4)
答案 1 :(得分:0)
使用C#中的一些额外逻辑,您可以使用此正则表达式:
(?<esc>\\*)\$(?<var>\w+)
它将分为两组 - 首先是反斜杠,第二组是变量名。现在你只需要在第一组中丢弃奇数长度的匹配。试试这段代码:
var regex = new Regex("(?<esc>\\\\*)\\$(?<var>\\w+)", RegexOptions.Multiline);
var text = "Hello $var, this is a backslash $ followed by a dollar: \\\\\\$\r\n$test \\$escaped \\\\$not_escaped \\\\\\$escaped_again \\\\\\\\$you_get_the_idea";
foreach (Match match in regex.Matches(text))
{
if (match.Groups["esc"].Length % 2 == 0)
Console.WriteLine(match.Groups["var"].Value);
}
答案 2 :(得分:-1)
你可以简单试试这个正则表达式: - [\ $] [\ W] *