Es gibt einige Saiten:Wie kann ich mit beiden regulären Ausdrücke passen, wenn die Regex Gruppe verschachtelt ist?
111/aaa
111/aaa|222/bbb
Sie sind in der Form des Ausdrucks:
(.*)/(.*)(|(.*)/(.*))?
Ich habe versucht, es zu benutzen, um eine Zeichenfolge zu entsprechen und die Werte extrahieren:
var rrr = """(.*)/(.*)(|(.*)/(.*))?""".r
"123/aaa|444/bbb" match {
case rrr(pid,pname, cid,cname) => println(s"$pid, $pname, $cid, $cname")
case _ => println("not matched ?!")
}
aber es druckt:
not matched ?!
Und ich will bekommen:
123, aaa, 444, bbb
Wie es zu beheben?
UPDATE
Vielen Dank für @BartKiers und @ Barmar der Anser, dass fand ich meine Regex einige Fehler hat, und fand schließlich diese Lösung:
var rrr = """(.*?)/(.*?)([|](.*?)/(.*?))?""".r
"123/aaa|444/bbb" match {
case rrr(pid,pname, _, cid,cname) => println(s"$pid, $pname, $cid, $cname")
case _ => println("not matched ?!")
}
Es funktioniert, aber man kann sehen, gibt es eine _
die eigentlich nicht sinnvoll ist. Gibt es eine Möglichkeit, die regex neu zu definieren, die ich rrr(pid,pname,cid,cname)
nur schreiben kann, es passen?
'|' ist ein Sonderzeichen in Regexp, Sie müssen es entkommen. – Barmar
Ich denke, ich kann Nicht-Capture-Gruppe verwenden: '?:' – Freewind
Ja, wenn es Gruppen gibt, die Sie nur für das Muster verwenden, nicht zu erfassen, das ist, was Nicht-Capture-Gruppen sind. – Barmar