18 Stimmen

Regex Optionale Gruppen?

Ich scheine mich mit einem preg_match regex ich tun verwirrt haben, so frische Augen und Hilfe wäre geschätzt werden.

Meine aktuelle Regex lautet wie folgt:

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

Ich möchte, dass die Zahleneingabe und der Doppelpunkt optional sind, z. B. :(1,4), damit es passt:

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

ou

<!--menu:start:(0,3)--><!--menu:end-->

33voto

glmxndr Punkte 43786

Mit einer nicht übereinstimmenden Gruppe einschließen und diese auf optional setzen: (?:...)?

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

29voto

Blixt Punkte 48333

Zum Beispiel so:

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

Ich habe eine nicht fangende Gruppe hinzugefügt, (?: ) um den Teil herum, der fakultativ sein soll, und dann mit einem Fragezeichen versehen: (?:<optional content>)?

5voto

Helen Punkte 70190

Dabei wird eine optionale nicht-erfassende Gruppe verwendet -- (?: )? -- passend zu Ihrem optionalen Teil, und auch \d anstelle von [0-9] um Ziffern abzugleichen:

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

Wenn Zahlen in Klammern aus mehr als einer Ziffer bestehen können, verwenden Sie stattdessen diese Ziffer:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X