2016-03-06 2 views
1

В этом регулярном выражении (\d*)[\^*{2}](\d*) Я пытаюсь захватить цифры формулы мощности: например, 2^3 должен возвращать 2 и 3, а 4 ** 5 должен возвращать 4 и 5. Выражение работает только в первом случае, какие-нибудь идеи?Сила в регулярном выражении

+0

Ваша ссылка на regex101 описывает это отлично. Регулярное выражение неверно для того, что вы пытаетесь сделать. – migg

ответ

3

*{2} бит не делает то, что вы думаете, что он делает, потому что он находится в классе ([]). Он будет принимать каждый отдельный символ в классе (только метасимволы в классах: ^ и -). Таким образом, ваше выражение примет 121, 1 {4 и т. Д. Возможно, что-то вроде этого:

(\d+)(?:\^|\*{2})(\d+) 

Ближе к отметке.

+0

@migg спасибо! Просто поймал это. – ig0774

+0

Мои ▲ идет к этому, так как решение @ migg имеет ошибки. –

1

Это было бы правильно:

(\d*)(?:\^|\*{2})(\d*) 

Вы буквально соответствие все внутри вашего [], который не то, что вы хотите.

+0

Хотя @ ig0774 имеет аналогичное решение для вас, но '*' делает разницу в поиске. Он также позволит первой или последней цифре быть «необязательной», как если бы она не присутствовала, и, следовательно, соответствует «** 5», «2 **», «^ 4», «**», «^». –

+0

@noob Вы правы. Я пытался держать его близко к оригиналу, потому что OP не указывает, например, '^ 5' должно совпадать или нет. Проблема была явно между «[]». Так что «ошибка» немного растянута ИМХО. – migg

+0

Когда я сказал ** ошибка **, я имел в виду неожиданное поведение. –