Überlappender String-Abgleich mit Regex
In der Zeichenfolge „12345“ wird „.match(/d{3}/g)“ angewendet. sollte im Idealfall drei Übereinstimmungen zurückgeben: „123“, „234“ und „345“. Es wird jedoch nur eine Übereinstimmung („123“) erhalten.
Grund:
Das globale Flag „g“ im regulären Ausdruck verbraucht drei Ziffern und erhöht den Index auf die Position nach dem ersten Spiel. Dies bedeutet, dass sich der Index bereits an Position 3 befindet, wenn die Regex versucht, mit der nächsten Teilzeichenfolge übereinzustimmen, sodass die verbleibenden überlappenden Übereinstimmungen effektiv übersprungen werden.
Lösung: Nullbreiten-Behauptung
Eine Behauptung mit einer Breite von Null, insbesondere ein positiver Lookahead mit einer einfangenden Gruppe, kann verwendet werden, um alle Positionen innerhalb der Eingabezeichenfolge abzugleichen. Diese Technik umfasst:
Beispiel in JavaScript:
var re = /(?=(\d{3}))/g; console.log(Array.from('12345'.matchAll(re), x => x[1]));
Das obige ist der detaillierte Inhalt vonWie kann ich mit Regex überlappende Übereinstimmungen in einer Zeichenfolge finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!