Ich bin in Ordnung mit grundlegenden regulären Ausdrücken, aber ich bin ein bisschen verloren verloren pos/neg Look ahead/hinterher.mit Regex, um alle Zeichen vorzuspringen, bis eine bestimmte Folge von Buchstaben mit negativen Lookahead
Ich versuche, die ID # daraus zu ziehen:
[keyword stuff=otherstuff id=123 morestuff=stuff]
Es unbegrenzte Mengen an „Stoff“ vor oder nach sein könnte. Ich war die Regex Coach mit Debug zu helfen, was ich versucht habe, aber ich bin nicht in Bewegung nach vorne mehr ...
Bisher habe ich dies:
\[keyword (?:id=([0-9]+))?[^\]]*\]
Welche Pflege braucht der irgendwelche zusätzlichen Attribute nach der ID, aber ich kann nicht herausfinden, wie alles zwischen Schlüsselwort und ID zu ignorieren ist. Ich weiß, ich kann nicht gehen [^id]*
Ich glaube, ich muss ein negatives Lookahead wie dieses verwenden, aber ich denke, da es null Breite ist, bewegt es sich nicht von dort weiter. Das funktioniert nicht, entweder:
\[keyword[A-z0-9 =]*(?!id)(?:id=([0-9]+))?[^\]]*\]
Ich habe überall nach Beispielen suchen, haben aber keine gefunden. Oder vielleicht habe ich es getan, aber sie sind so weit über meinen Kopf gegangen, dass ich nicht einmal wusste, was sie waren.
Hilfe! Danke.
EDIT: Es muss auch [Schlüsselwort stuff = otherstuff] übereinstimmen, wobei id = überhaupt nicht existiert, also muss ich eine 1 oder 0 in der ID # -Gruppe haben. Es gibt auch andere [otherkeywords id = 32], die ich nicht abgleichen möchte. Das Dokument muss mehrere [Keyword-ID = 3] in allen Dokumenten mit preg_match_all übereinstimmen.
Die angebotenen Lösungen funktionieren großartig und wahrscheinlich Benchmark schneller als mit jeder Art von Lookahead, ich werde es definitiv so machen. Aber für meine eigene Neugier, und vielleicht jemand, der diese Frage mit Google in der fernen Zukunft trifft, ist die Methode, die ich versuchte, um zu bekommen? Das heißt, können Lookaheads verwendet werden, um einige Dinge zu überspringen, bis ein bestimmtes Wort getroffen wird? – phazei