Frage

scheine ich mich mit einer preg_match regex verwechselt habe ich tue, so frische Augen und Hilfe würden geschätzt.

Meine aktuelle Regex ist wie folgt:

/<!--menu:start:\(([0-9])\,([0-9])\)-->(.*?)<!--menu:end-->/se

Ich suche die Nummer eingegeben und Kolon beispiel zu machen : (1,4) optional, so würde es entsprechen:

<!--menu:start--><!--menu:end-->

oder

<!--menu:start:(0,3)--><!--menu:end-->
War es hilfreich?

Lösung

Umschließen mit einer nicht passenden Gruppe und setzen Sie sich auf optional: (?:...)?

/<!--menu:start(?::\(([0-9])\,([0-9])\))?-->(.*?)<!--menu:end-->/se

Andere Tipps

Wie folgt aus:

/<!--menu:start(?::\((\d),(\d)\))?-->(.*?)<!--menu:end-->/se

Ich habe eine nicht-einfangende Gruppe, (?: ) hinzugefügt, um den Teil, den Sie optional sein wollen, und nachgestellten es dann mit einem Fragezeichen: (?:<optional content>)?

Diese nutzt eine optionale nicht-einfangende Gruppe - (?: )? - Ihren optionalen Teil entsprechen, und auch anstelle von \d [0-9] Ziffern entsprechen:

/<!--menu:start(?::\((\d),(\d)\))?-->(.*?)<!--menu:end-->/se

Wenn Zahlen in Klammern von mehr als einer Ziffer bestehen, diese benutzen statt:

/<!--menu:start(?::\((\d+),(\d+)\))?-->(.*?)<!--menu:end-->/se
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top