测试字符串:
${$var1} bla ${$var2} bla ${$var2}
\${$var2} bla \\\${$var2} bla $var1
\\${$var1} bla \\${$var2} bla \${$var2}
\\\{$var2} bla \\${$var2} bla \${$var2}
$var1 bla \$var1 bla \\$var1 bla \\\$var1
\$var1 bla \\$var1 bla \\\$var1
\\$var1 bla \\\$var1 bla \$var1 bla
\\\$var1 bla \\$var1 bla \\\$var1
选择我正在寻找:
我正在寻找只选择${$varN}, \\${$varN}, $varN, \\$varN
的正则表达式
没有选择\${$varN}, \\\${$varN}, \$varN, \\\$varN
正则表达式我尝试过:
(\$\{\$\w*\})|(\$\w*)
但它会选择所有${$varN}
和$varN
答案 0 :(得分:3)
您可以将此正则表达式与负面的lookbehind一起使用:
(?<!\\|{)(?:\\\\)*\$(?:{\$)?\w*}?
RegEx说明:
(?<!\\|{)
- 断言判断我们没有反斜杠或{
作为前一个字符(?:\\\\)*
- 匹配0个或更多对的反斜杠\$
- 匹配文字$
(?:{\$)?
- 匹配可选 {
后跟$
\w+
- 匹配1个或多个字词}?
- 匹配可选结束}
更新:如果您想要更精确的匹配(不允许${$var3
),请使用使用if-else-then
构造的高级PCRE正则表达式:
(?<!\\|{)(?:\\\\)*\$({\$)?\w+(?(1)})