Rolf B: Alles zwischen zwei Zeichen ausschneiden

Beitrag lesen

Hallo Meowsalot,

Suchmuster lernt man kennen, indem man die Doku studiert und damit experimentiert. Es braucht auch etwas Geduld; Regexe gehören zu den sperrigeren Lerninhalten.

Regex-Portal im Self-WIKI

Mein Lieblings-Experimentierkasten - kann Suchen und auch Ersetzen

Rechts auf dieser Seite findest Du eine Aufschlüsselung, wie er dein Pattern verstanden hat, und auch eine Kurzreferenz über die verwendbaren Zeichen.

Dein Pattern könnte übrigens auch so aussehen: /_([^_]{0;3})([^_]*)_/. Dann hat dein $matches-Array drei Einträge: den kompletten Match, die ersten drei Zeichen zwischen den _, und den Rest. Ich nehm's mal auseinander:

_ | Findet ein _
(...) | Runde Klammern bilden eine Match-Gruppe, d.h. einen Eintrag im $matches Array [^] | Eckige Klammern bilden eine Menge aus Zeichen, von denen eins vorkommen muss. [a-z] findet genau einen Kleinbuchstaben. Das ^ vorneweg negiert die Menge, hier also „alles außer “ ...{0;3} | {n;m} ist, genau wie *, ein Quantifizierer - eine Mengenangabe. * bedeutet „kommt null bis beliebig oft mal vor“, mit {n,m} kannst Du Unter- und Obergrenze vorgeben. ([^]{0;3}) | ist also eine Folge beliebiger Zeichen, die nicht _ sind, die 0-3 Zeichen umfasst. ([^]*) | Bildet eine Matchgruppe, die 0-n Zeichen enthält, die nicht _ sind _ | Und noch ein _

Durch die Aufteilung in 0-3 Zeichen und dann beliebig viele Zeichen brauchst Du kein substr mehr.

Rolf

--
sumpsi - posui - clusi