测试字符串:
${$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
最佳答案
您可以将此正则表达式与否定的后面一起使用:
(?<!\\|{)(?:\\\\)*\$(?:{\$)?\w*}?
RegEx Demo
RegEx说明:
(?<!\\|{)
-负向超前断言来断言我们没有反斜杠或{
作为上一个字符(?:\\\\)*
-匹配0个或更多对反斜杠\$
-匹配文字$
(?:{\$)?
-匹配可选的{
,后跟$
\w+
-匹配1个或更多单词}?
-匹配可选的结束}
更新:如果您想进行更精确的匹配(不允许使用
${$var3
),请使用此使用if-else-then
构造的高级PCRE正则表达式:(?<!\\|{)(?:\\\\)*\$({\$)?\w+(?(1)})
RegEx Demo2