2017-02-15 10 views
5

test String:neguje wiele słów

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

Wybór Szukam:

Szukam regex, aby wybrać tylko ${$varN}, \\${$varN}, $varN, \\$varN bez wybierania \${$varN}, \\\${$varN}, \$varN, \\\$varN

Regex Próbowałem: (\$\{\$\w*\})|(\$\w*) ale wybiera wszystkie ${$varN} i $varN

+1

Czy możesz wyjaśnić bardziej szczegółowo, skąd pochodzi twój ciąg i dlaczego próbujesz tylko dopasować słowa z parzystą liczbą ukośników? – ThisSuitIsBlackNot

Odpowiedz

3

Można użyć tego wyrażenia regularnego z ujemnym lookbehind:

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

RegEx Demo

RegEx Opis:

  • (?<!\\|{) - ujemny uprzedzona do twierdzą, że nie mamy ukośnika odwrotnego ani { jak poprzedniego znaku
  • (?:\\\\)* - mecz 0 lub więcej pary z ukośniki
  • \$ - Match dosłownym $
  • (?:{\$)? - mecz opcjonalnie{ następnie $
  • \w+ - Wytypowanie 1 lub więcej słów
  • }? - Dopasuj opcjonalnie zamykanie }

Aktualizacja: Jeśli chcesz bardziej precyzyjne dopasowanie (jeden, który wykluczy ${$var3), a następnie użyć tego zaawansowanego PCRE regex, który używa if-else-then konstrukt:

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

RegEx Demo2

+1

Szybkie wyjaśnienie zostanie docenione, wielkie dzięki. :) – Omar

+1

Wielkie dzięki .. regex101 wyjaśnia :) – Omar

+0

Dodałem również szczegółowe wyjaśnienie w mojej odpowiedzi. – anubhava

Powiązane problemy