首页 > 解决方案 > 匹配字符串内的变量

问题描述

我想匹配字符串中的变量,这些变量使用美元符号来寻址$。但是,我的正则表达式不应匹配转义的美元符号后的字符序列(例如用反斜杠转义\$)。
如果反斜杠与另一个反斜杠 ( \\) 一起转义,则当然应该匹配以下变量。

TL;DR:任何序列$xxxxx都应该匹配,只要它遵循偶数个反斜杠\(0、2、4、6,...)。反斜杠本身应该是捕获组的一部分。


我目前有以下表达式:(?:[^\\]*(\\{2})*)(\$[a-z_]\w*\b),但它不能在以下文本上正常工作(当然有 options \igm):

Hello $var, this is a backslash followed by a dollar: \\\$
$test \$escaped \\$not_escaped \\\$escaped_again \\\\$you_get_the_idea

匹配的“变量”应该是$var$test和。 但是,https://regex101.com显示其他匹配项。$not_escaped$you_get_the_idea


我无法理解这个错误。

标签: c#regex

解决方案


将此正则表达式与后向断言一起使用,您可以捕获组 1 中的变量字符串:

(?<!\\)(?:\\\\)*(\$\w+)

regex101.com 上的演示


推荐阅读