2016-07-27 7 views
0

Ich möchte alles außer Zeichenfolge in Anführungszeichen erfassen, gibt es eine Möglichkeit, es leicht zu tun?Wie string in Anführungszeichen in meiner Regex ausschließen?

Die Regex ist die folgende: \b([\w]+)\b|("([^"])*")

Hier ist das Beispiel mit den Anführungszeichen eingeschlossen:

http://imgur.com/a/MsFNp

+0

durch Ihre vorherige Frage zu urteilen, ich vermute, Sie [müssen '(| \ b (\ w +) \ b | "([^"] *) ")'] (https://regex101.com/r/eW9vK5/1) Siehe [PHP-Demo] (http://ideone.com/QHQ6Qt) –

Antwort

2

PHP hat eine nette Funktion namens *SKIP/*FAIL (benannt Rückzieher Steuer Verben als @Federico weist richtig):

"[^"]+"(*SKIP)(*FAIL) # everything to the left will be ignored 
|      # or 
\b(\w+)\b    # a word surrounded by boundaries 

Siehe a demo on regex101.com.


In PHP dies wäre:

$regex = '~"[^"]+"(*SKIP)(*FAIL)|\b(\w+)\b~'; 
$string = 'this one "but this one not" but again this one'; 
preg_match_all($regex, $string, $matches); 
print_r($matches); 
+2

Sie werden Backtracking-Kontrollverben genannt http://www.rexegg.com/backtracking-cont rol-verben.html –

+0

@FedericoPiazza: Aktualisiert, danke. – Jan

Verwandte Themen