2009-09-26 3 views
7

Ich muss 1 oder mehrere definierte Gruppen von Zeichen finden, die in Klammern eingeschlossen sind. Wenn mehr als eine Gruppe vorhanden ist, wird sie durch einen Bindestrich getrennt.Versuchen, Buchstabengruppen mit Regex zu finden

Beispiel:

(us) 
(jp) 
(jp-us) 
(jp-us-eu) 

Ich habe herausgefunden, wie die Gruppe zu finden, wenn die Zeichenfolge nur eine Gruppe enthalten:

/\(us\)|\(jp\)/ 

Aber ich bin verwirrt, wenn es darum geht, mehr zu finden als eine, getrennt durch eine hegen und in keiner bestimmten Reihenfolge: (us-jp) ODER (jp-us)

Jede Hilfe ist willkommen.

Danke, Simon

+0

Können Sie klären, was Sie suchen? Die von Ihnen angegebene Regex wird sowohl (us-jp) als auch (jp-us) finden. – bbg

Antwort

13
\((\b(?:en|jp|us|eu)-?\b)+\) 

Erläuterung:

 
\(     // opening paren 
(      // match group one 
    \b     // word boundary 
    (?:en|jp|us|eu)  // your defined strings 
    -?     // a hyphen, optional 
    \b     // another word boundary 
)+      // repeat 
\)      // closing paren 

Spiele:

(us) 
(jp) 
(jp-us) 
(jp-us-eu) 

nicht überein:

(jp-us-eu-) 
(-jp-us-eu) 
(-jp-us-eu-) 
+1

Gute Lösung, ich hatte eine längere, aber die Angabe der '\ b' Wortgrenze vor den Klammern stellt sicher, dass wir dort keinen nachgestellten Bindestrich haben. –

2

Versuchen Sie folgendes:

/\([a-z]{2}(?:-[a-z]{2})*\)/ 

dass zwei beliebige Buchstabenfolge in Klammern übereinstimmen, dass meine mehr zwei Buchstabenfolgen separeted durch Bindestriche enthalten. So (ab), (ab-cd), (ab-cd-ef), (ab-cd-ef-gh) usw.

+0

Eine andere Möglichkeit, +1. Entspricht jedoch nicht der Anforderung "definierte Gruppen von Zeichen". Um dies zu beheben, müssten Sie sich jedoch wiederholen. – Tomalak