Pour commencer, je ne suggère pas d'utiliser "*" dans les expressions régulières. Oui, je sais, c'est le délimiteur multi-caractères le plus utilisé, mais c'est quand même une mauvaise idée. C'est parce que, bien qu'il corresponde à n'importe quelle quantité de répétition pour ce caractère, "any" inclut 0, ce qui est généralement quelque chose pour lequel vous voulez lancer une erreur de syntaxe, pas accepter. Au lieu de cela, je suggère d'utiliser le +
signe, qui correspond à toute répétition de longueur> 1. De plus, d'après ce que je peux voir, vous avez affaire à des expressions entre parenthèses de longueur fixe. En conséquence, vous pouvez probablement utiliser la {x, y}
syntaxe pour spécifier spécifiquement la longueur souhaitée.
Cependant, si vous avez vraiment besoin d'une répétition non gourmande, je vous suggère de consulter le tout-puissant ?
. Ceci, lorsqu'il est placé après à la fin de tout spécificateur de répétition regex, forcera cette partie de l'expression régulière à trouver le moins de texte possible.
Cela étant dit, je serais très prudent avec le ?
car il, comme le tournevis sonique dans Dr. Who, a tendance à faire, comment devrais-je le dire, des choses "légèrement" indésirables si elles ne sont pas soigneusement calibrées. Par exemple, pour utiliser votre exemple d'entrée, il identifierait ((1)
(notez l'absence d'un deuxième rparen) comme une correspondance.