Для начала я не предлагаю использовать "*" в регулярных выражениях. Да, я знаю, это наиболее используемый многосимвольный разделитель, но, тем не менее, это плохая идея. Это потому, что, хотя он соответствует любому количеству повторений для этого символа, «any» включает в себя 0, что обычно является причиной того, что вы хотите вызвать синтаксическую ошибку, а не принять. Вместо этого я предлагаю использовать +
знак, который соответствует любому повторению длины> 1. Более того, из того, что я вижу, вы имеете дело с выражениями в скобках фиксированной длины. В результате вы, вероятно, можете использовать {x, y}
синтаксис, чтобы конкретно указать желаемую длину.
Однако, если вам действительно нужно не жадное повторение, я советую обратиться ко всемогущим ?
. Это, после размещения после в конце любого спецификатора повторения регулярного выражения, заставит эту часть регулярного выражения найти наименьшее возможное количество текста.
При этом я был бы очень осторожен с тем, ?
как оно, подобно звуковой отвертке в «Докторе Кто», имеет тенденцию делать, как бы это выразиться, «слегка» нежелательные вещи, если не будет тщательно откалиброван. Например, чтобы использовать ваш пример ввода, он идентифицирует ((1)
(обратите внимание на отсутствие второго rparen) как совпадение.