2017-02-15 84 views
5

测试字符串:取反多个单词

${$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

+1

你能否更详细地解释你的字符串来自哪里以及为什么你只是试图匹配单词偶数个反斜杠? – ThisSuitIsBlackNot

回答

3

您可以使用此正则表达式与负回顾后:

(?<!\\|{)(?:\\\\)*\$(?:{\$)?\w*}? 

RegEx Demo

正则表达式描述:

  • (?<!\\|{) - 负向前查找到断言我们没有反斜杠或{如先前字符
  • (?:\\\\)* - 匹配0以上对反斜杠
  • \$ - 匹配文字$
  • (?:{\$)? - 匹配接着$
  • \w+可选{ - 第1或多个字
  • }? - Match 可选收盘}

更新:如果你想更精确的匹配(一说不允许${$var3),然后使用这个先进的使用if-else-then结构PCRE正则表达式:

(?<!\\|{)(?:\\\\)*\$({\$)?\w+(?(1)}) 

RegEx Demo2

+1

快速解释将不胜感激,非常感谢。 :) – Omar

+1

非常感谢.. regex101解释:) – Omar

+0

我也在我的答案中添加了详细的解释。 – anubhava