2016-08-05 19 views
0

passend habe ich einen string:RegEx mehrere genaue Strings

MPCP-1234 this is test SAF-1234 this is testing 

Ich brauche MPCP-1234 und SAF-1234 übereinstimmen.

Mein REGEX ist

SAF|MPCP-[0-9][0-9][0-9][0-9] 

Aber es wird nur der Suche nach MPCP-1234 und SAF (nicht SAF-1234). Ich muss beides zusammenbringen.

Regex101 link

Antwort

0

Das Problem, das Sie haben die Alternative "Operator" (|). Die von Ihnen gepostete Regex entspricht "SAF" ODER "MPCP-<4-digit number>".

Was Sie wollen, ist (?:SAF|MPCP)-\d{4}. Die \d entspricht einer Ziffer, und {4} bedeutet "genau 4 der letzten Token" (in diesem Fall \d). Die (?:) bedeutet "nicht einfangende Gruppe".

Um Ihr Problem ein wenig besser zu erklären, ist das Wechselzeichen auf die aktuelle Gruppe beschränkt. Wenn es keine explizite geklammerte Gruppe gibt, wird das gesamte Muster als implizite Gruppe verwendet.

+0

Dank Sebastian: Did the job :) – suj

0
(SAF|MPCP)-[0-9][0-9][0-9][0-9] 

Gruppe SAF und MPCP. Das sollte dein Problem lösen.

+0

dies bereits versucht, kein Glück – suj

0

ich denke, die "(SAF|MPCP)-[0-9][0-9][0-9][0-9]" Ihr Problem lösen kann, die ich getestet shell grep ; echo -e "SAF-1234\nMPCP-1234" | grep -E "(SAF|MPCP)-[0-9]{4}"

+0

dies bereits versucht, kein Glück – suj