Per cominciare, non suggerisco di usare "*" nelle regex. Sì, lo so, è il delimitatore multi-carattere più usato, ma è comunque una cattiva idea. Questo perché, sebbene corrisponda a qualsiasi quantità di ripetizione per quel personaggio, "qualsiasi" include 0, che di solito è qualcosa per cui vuoi lanciare un errore di sintassi, che non accetta. Invece, suggerisco di usare il +
segno, che corrisponde a qualsiasi ripetizione di lunghezza> 1. Inoltre, da quello che posso vedere, hai a che fare con espressioni tra parentesi a lunghezza fissa. Di conseguenza, è possibile probabilmente utilizzare la {x, y}
sintassi per specificare in modo specifico la lunghezza desiderata.
Tuttavia, se hai davvero bisogno di ripetizioni non avide, ti suggerisco di consultare l'onnipotente ?
. Questo, se posto dopo alla fine di qualsiasi identificatore di ripetizione regex, costringerà quella parte del regex a trovare la minima quantità di testo possibile.
Detto questo, starei molto attento a ?
come, come il cacciavite sonico nel Dr. Who, ha la tendenza a fare, come dovrei dirlo, cose "leggermente" indesiderate se non calibrate con cura. Ad esempio, per utilizzare l'input di esempio, identifica ((1)
(nota la mancanza di un secondo rparen) come una corrispondenza.