Question

Il semble que je me suis confondu avec une regex preg_match que je suis en train de faire, donc des yeux neufs et de l'aide seraient appréciés.

Mon expression rationnelle actuelle est la suivante:

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

Je cherche à entrer le nombre et les deux points, par exemple. : (1,4) facultatif, cela correspond donc à:

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

ou

<!--menu:start:(0,3)--><!--menu:end-->
Était-ce utile?

La solution

Joindre à un groupe ne correspondant pas et le définir en option: (?:...)?

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

Autres conseils

Comme ceci:

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

J'ai ajouté un groupe, (?: ) non-capturant, autour de la partie que vous souhaitez voir optionnelle, puis vous l'avez suffixé d'un point d'interrogation: (?:<optional content>)?

Ceci utilise un groupe facultatif sans capture - (?: )? - pour correspondre à votre pièce facultative, ainsi que \d au lieu de [0-9] pour faire correspondre les chiffres:

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

Si les nombres entre parenthèses peuvent être composés de plusieurs chiffres, utilisez celui-ci à la place:

/<!--menu:start(?::\((\d+),(\d+)\))?-->(.*?)<!--menu:end-->/se
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top