2016-03-29 13 views
1

Ich habe so regex:Spiel einzelnes Element aus einer Gruppe oder Einzelteilen durch Komma in verschiedenen Ordnungen getrennt

/A|B|A,B|B,A/

Welches ist der beste Weg, es zu Refactoring ist Gruppen mit?

+1

Längere Alternativen kommen zuerst sollten: [ 'B, A | A, B | A | B '] (https: // regex101.com/r/jT8jO1/1). Warum Gruppen verwenden? –

+0

'/ ([AB]) (, (?! \ 1) [AB])? /'? – Biffen

+0

@Biffen A B waren wahrscheinlich Platzhalter für längere Muster OP bitte die ganze Sache zur Verfügung stellen – cvsguimaraes

Antwort

2

Da Sie PCRE verwenden, können Sie nur die Teilmuster wickeln Sie mit einfangenden Gruppen wiederholen müssen und dann Rekursion sie nur mit (?n) Syntax (Subroutinenaufrufe):

(A),(B)|(?2),(?1)|(?1)|(?2) 

Siehe regex demo

Hier (A) fängt A in Gruppe 1 und (B) erfasst B in Gruppe 2, so, um diese Untermuster später im Muster zu verwenden, benutzen Sie einfach (?1) zum ersten Untermuster und (?2) zum Wiederholen des zweiten Untermusters.

Sie können auch genannt Capture-Gruppen verwenden:

(?<first>A),(?<second>B)|(?&second),(?&first)|(?&first)|(?&second) 

Siehe another regex demo

+0

Саша, пожалуйста, поставьте галочку раз уж моё решение сработало. –