Wenn Sie die grep regexp Grammatik nahm, nicht die egrep eine oder die sed regexp Grammatik und verwendet, dass Sie sollten eine sichere Teilmenge für viele Plattformen und Tools verwenden.
Über die einzige Sache, die Sie dann beißen können, ist wenn Sie zwischen Regexp-Implementierungen mit Finite-State-Automaten (FSA) und denen mit Backtracking, z. Quantifier-Implementierungen variieren von grep zu Perl.
FSA-basierte Implementierungen finden die längste Übereinstimmung ab der ersten möglichen Position. Backtracking-Spieler finden das linksbündige erste Match, beginnend bei der ersten möglichen Position. Das heißt, es wird jede Verzweigung in der Reihenfolge in dem Muster versuchen, bis eine Übereinstimmung gefunden wird.
Betrachten Sie die Zeichenfolge "xyxyxyzz"
und das Muster "(xy)*(xyz)?"
. FSA-basierte Engines stimmen mit dem längsten möglichen Teilstring überein, "xyxyxyz"
. Backtracking-basierte Engines stimmen mit dem linksbündigen ersten Teilstring "xyxyxy"
überein.
"nicht endliche Entscheidungsautomaten". Mein Computer hat nur endlichen Speicher; Wie hält es ein unendliches $ THING? Ich denke, du könntest s/endlich/deterministisch/g bedeuten. –