Nicht gierige Übereinstimmung mit regulären Ausdrücken für Trennzeichen mit mehreren Zeichen in awk

Betrachten Sie die Zeichenfolge"AB 1 BA 2 AB 3 BA". Wie kann ich den Inhalt zwischen"AB" und"BA" nicht gierig (in awk)?

Ich habe Folgendes versucht:

awk '
BEGIN {
    str="AB 1 BA 2 AB 3 BA"
    regex="AB([^B][^A]|B[^A]|[^B]A)*BA"
    if (match(str,regex))
        print substr(str,RSTART,RLENGTH)
}'

ohne Ausgabe. Ich glaube, der Grund für keine Übereinstimmung ist, dass es eine ungerade Anzahl von Zeichen zwischen gibt"AB" und"BA". Wenn ich ersetzestr mit"AB 11 BA 22 AB 33 BA" Der Regex scheint zu funktionieren.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage