Para começar, não sugiro usar "*" nas expressões regulares. Sim, eu sei, é o delimitador de vários caracteres mais usado, mas, no entanto, é uma má ideia. Isso ocorre porque, embora corresponda a qualquer quantidade de repetição para esse caractere, "any" inclui 0, que geralmente é algo para o qual você deseja gerar um erro de sintaxe, não aceita. Em vez disso, sugiro usar o +
sinal, que corresponde a qualquer repetição de comprimento> 1. Além disso, pelo que posso ver, você está lidando com expressões entre parênteses de comprimento fixo. Como resultado, você provavelmente pode usar a {x, y}
sintaxe para especificar especificamente o comprimento desejado.
No entanto, se você realmente precisa de repetições não gananciosas, sugiro consultar o todo-poderoso ?
. Isso, quando colocado após o final de qualquer especificador de repetição de regex, forçará essa parte do regex a encontrar a menor quantidade possível de texto.
Dito isto, eu teria muito cuidado com o ?
que ele tem, como a chave de fenda sônica no Dr. Who, como tem que fazer, como devo dizer, coisas "levemente" indesejadas se não forem calibradas com cuidado. Por exemplo, para usar sua entrada de exemplo, ela identificaria ((1)
(observe a falta de um segundo par) como uma correspondência.