2008-10-16 5 views
3

Я уверен, что это легко, но я попробовал массу вариаций и все еще не могу соответствовать тому, что мне нужно. Вещь слишком жадная, и я не могу заставить ее перестать быть жадным.Regex жадный вопрос

Учитывая текст:

test=this=that=more text follows 

Я хочу просто выбрать:

test= 

Я попытался следующие регулярные выражения

(\S+)=(\S.*) 
(\S+)?= 
[^=]{1} 
... 

Спасибо всем.

+1

Вы говорите, что хотите просто выбрать «text =», но это не происходит нигде в вашем примере текста! – theraccoonbear 2008-10-16 20:17:31

+0

wooops .. вы правы .. это должен был быть тест = .. Я отредактирую его – 2008-10-16 20:25:11

ответ

11

здесь:

// matches "test=, test" 
(\S+?)= 

or 

// matches "test=, test" too 
(\S[^=]+)= 

вы должны рассмотреть возможность использования второй версии поверх первой. учитывая вашу строку "test=this=that=more text follows", версия 1 будет соответствовать test=this=that=, затем продолжите синтаксический анализ до конца строки. он будет отступать, и найдите test=this=, продолжайте отступать, и найдите test=, продолжайте отступать и оставьте на test=, поскольку это окончательный ответ.

версия 2 будет соответствовать test=, затем остановится. вы можете увидеть повышение эффективности в больших поисковых запросах, таких как многострочные или целые совпадения документов.

1

Вы должны быть в состоянии использовать это:

(\S+?)=(\S.*) 
4

Вы, вероятно, хотите что-то вроде

^(\ S + =?)

Каретки^якоря регулярного выражения к началу строка. ? после + делает + неживого.

1

Lazy quantifiers работают, но они также могут быть хитом производительности из-за обратного хода.

Рассмотрите, что вы действительно хотите, это «куча неравновесных, равных и множество больше не равных».

([^=]+)=([^=]+) 

Ваши примеры [^=]{1} соответствует только один, не равен характер.

0

, если вы хотите только «текст =», я думаю, что просто:

^(\w+=) 

должен быть хорошо, если вы уверены о том, что строка «текст =» всегда будет начинать линию.

реальная проблема, когда строка выглядит так:

это = что = более тест = текст следует

, если вы используете регулярное выражение выше результата «это =» и если изменить выше с reapeater классификаторов в конце, как это:

^(\w+=)* 

вы найдете огромное «это = что =», так что я мог только представить себе тривиальный:

[th\w+=]*test= 

До свидания.