Regex Opsiyonel Gruplar?

3 Cevap php

Ben bir preg_match ben yapıyveyaum regex, çok taze gözlerle ve yardım takdir ile kendimi karışık gibi görünüyveya.

Aşağıdaki gibi benim geçerli regex olduğunu:

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

Ben sayı girişi ve kolon örneğin yapmak için arıyveyaum : (1,4) opsiyonel, bu maç bu yüzden:

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

veya

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

3 Cevap

Olmayan eşleşen grup içine alın ve isteğe bağlı olarak ayarlayın: (?:...)?

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

Bu gibi:

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

I (?: ), parçası etrafında isteğe bağlı olmak istiyorum, olmayan bir yakalama grubunu eklenmiş, ve daha sonra bir soru işareti ile ekli ettik: (?:<optional content>)?

Bu, isteğe bağlı olmayan bir yakalama grubunu kullanır - (?: )? - opsiyonel bölümünü maç için, ve aynı zamanda \d yerine [0-9] basamak eşleşmesi için:

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

Parantez içindeki sayılar birden fazla basamak oluşabilir, bu bir yerine kullanabilirsiniz:

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