2015-07-21 3 views
1

Я пытаюсь выполнить это регулярное выражение, но я не уверен, как написать условие или из-за жадного поведения регулярного выражения.Regex Or and Greedy

some_text=(?<value>.*)&|some_text=(?<value>.*)$ 

выше регулярное выражение именно то, что я хочу, но я хотел бы написать лучше тот, который будет выглядеть следующим образом:

some_text=(?<value>.*)(?:&|$) 

Но из-за алчности, это один не останавливает значение когда он встречает первый &, вместо этого он возвращается к концу строки.

Спасибо за помощь

ответ

1

Вы можете использовать только этим отрицанием регулярное выражение:

some_text=(?<value>[^&]*) 

[^&]* будет соответствовать 0 или более любых символов, которые не &

+0

Спасибо за ответ, но это не работает, когда я пытаюсь. И насколько я понимаю, он будет соответствовать значению, содержащему &, если оно существует. Я хочу сопоставить значение, которое НЕ содержит &, но регулярное выражение должно работать только в том случае, если после значения есть либо OR, либо конец строки. Вот пример, который должен соответствовать: 'https: //test.com/#/gg/plop? Ign = vava & some_text = 74381hui1h881 & iuri = 84' Это должно возвращать 74381hui1h881 в качестве значения. – linvi

+0

Нет '' 'не обязательно присутствовать во входной строке. См. Эту демонстрацию regex: https://regex101.com/r/nY7qW1/7 – anubhava

+0

Спасибо, что это сработало, я, должно быть, не ввел правильный ввод, когда я попробовал. Я отвечу на ваш ответ как ответ, но не могли бы вы объяснить мне. Я думаю, что это использует lookahead, но я не уверен. Спасибо – linvi