2017-02-15 86 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