Ich denke, das Problem ist, dass Sie falsch interpretieren, wie ein nicht-gieriger Quantifikator handelt. Sobald es in Betrieb ist, hört es früher auf als es sonst der Fall wäre. Aber es ist nicht bewusst von dem, was davor kommt (oder möglicherweise der Text, der später kommt). Es geht nur um seine aktuelle Position. Daher Sie der reguläre Ausdruck geschrieben wird alle überein:
">Hello >If see below!"
Mal sehen, wie das funktioniert:
/>[A-Z0-9].*?see below[^,\.<]*/
Die Regex zuerst für „>“ in „bcs sehen> Hallo> Wenn unten sehen! ", und findet den ersten, der gleich vor" Hello "ist. Ok, lassen Sie sich den nächsten Teil des Ausdrucks überprüfen:
[A-Z0-9]
Das nächste Zeichen ist ein H, die das Muster entspricht [A-Z0-9]. Immer noch gut! Next:
.*?
Jetzt passen wir alle nicht Newline Zeichen, bis wir auf die erste Instanz erhalten die verbleibenden Ausdrücke passen „siehe unten [^ ,. <] *“. Wenn wir nur einen reinen gierigen Quantifizierer verwendet hätten, könnten wir mehrere Fälle von "siehe unten [^. <] *" abgleichen, bis wir den letzten möglichen Treffer gefunden hätten. (Wenn also Ihre Zeichenfolge fortgesetzt wurde und anderer Text mit diesem Muster übereinstimmt, hätte dies auch erfasst.) Der nicht-gierige Quantifizierer bedeutet nicht, dass Ihr gesamtes Muster die kleinstmögliche Übereinstimmung von ist alle möglichen Übereinstimmungen in der Zeichenfolge. Es bestimmt nur, wie dieses bestimmte Zeichen funktioniert.
Sie könnten die folgenden Muster versuchen wollen, dann:
/>[A-Z0-9][^>]*?see below[^,\.<]*/
Hoffentlich klären it up!
Ihre Frage ergibt keinen Sinn mit Ihrem Code-Snippet. Ihre Aussage ersetzt das Muster durch nichts. Ihre Antwort schlägt vor, dass Sie es durch etwas ersetzen möchten. – cletus
Das Programm macht, was Sie gefragt haben, zu tun. Es ist nicht klar, was du bekommen willst. Gib ein anderes Beispiel. – jbasko
Es ist etwas mit nicht-gierigen Regex, ich denke, es ist ziemlich klar, warum nicht? – omg