测试字符串:
${$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
Run Code Online (Sandbox Code Playgroud)
选择我正在寻找:
我正在寻找一个正则表达式,只${$varN}, \\${$varN}, $varN, \\$varN
选择而不选择\${$varN}, \\\${$varN}, \$varN, \\\$varN
我试过的正则表达式:
(\$\{\$\w*\})|(\$\w*)但它选择了所有${$varN}和$varN
您可以将此正则表达式与负向后查找一起使用:
(?<!\\|{)(?:\\\\)*\$(?:{\$)?\w*}?
Run Code Online (Sandbox Code Playgroud)
正则表达式说明:
(?<!\\|{)- 负向前瞻断言我们没有反斜杠或{前一个字符(?:\\\\)*- 匹配0对或多对反斜杠\$- 匹配文字$(?:{\$)?- 匹配可选 {后跟$\w+- 匹配 1 个或多个单词}?- 匹配可选结束}更新:如果您想要更精确的匹配(不允许${$var3),请使用此高级 PCRE 正则表达式,该表达式使用if-else-then以下构造:
(?<!\\|{)(?:\\\\)*\$({\$)?\w+(?(1)})
Run Code Online (Sandbox Code Playgroud)