В этом регулярном выражении (\d*)[\^*{2}](\d*) Я пытаюсь захватить цифры формулы мощности: например, 2^3 должен возвращать 2 и 3, а 4 ** 5 должен возвращать 4 и 5. Выражение работает только в первом случае, какие-нибудь идеи?Сила в регулярном выражении
ответ
*{2}
бит не делает то, что вы думаете, что он делает, потому что он находится в классе ([]
). Он будет принимать каждый отдельный символ в классе (только метасимволы в классах: ^
и -
). Таким образом, ваше выражение примет 121, 1 {4 и т. Д. Возможно, что-то вроде этого:
(\d+)(?:\^|\*{2})(\d+)
Ближе к отметке.
@migg спасибо! Просто поймал это. – ig0774
Мои ▲ идет к этому, так как решение @ migg имеет ошибки. –
Это было бы правильно:
(\d*)(?:\^|\*{2})(\d*)
Вы буквально соответствие все внутри вашего []
, который не то, что вы хотите.
Хотя @ ig0774 имеет аналогичное решение для вас, но '*' делает разницу в поиске. Он также позволит первой или последней цифре быть «необязательной», как если бы она не присутствовала, и, следовательно, соответствует «** 5», «2 **», «^ 4», «**», «^». –
@noob Вы правы. Я пытался держать его близко к оригиналу, потому что OP не указывает, например, '^ 5' должно совпадать или нет. Проблема была явно между «[]». Так что «ошибка» немного растянута ИМХО. – migg
Когда я сказал ** ошибка **, я имел в виду неожиданное поведение. –
Ваша ссылка на regex101 описывает это отлично. Регулярное выражение неверно для того, что вы пытаетесь сделать. – migg