2011-01-14 3 views
3

Как написать регулярное выражение, , которое работает в wxRegEx, чтобы соответствовать чему-то этому псевдо-регулярному выражению: *good|better|best*?Regex, чтобы соответствовать нескольким целым словам

Я знаю о согласовании регулярных выражений на уровне символов, то есть *.[ch]pp, но как далеко продвигаются целые слова?

Спасибо.

+0

http://rubular.com/r/UahBdaQNhi? – marcog

+0

@marcog это отличный ресурс, спасибо! Почему '\ b (good | better | best) \ b' работает там, но не в wxRegEx? –

+0

Другой приятный ресурс: http://www.regexguru.com/2008/04/wxregex-class-in-wxwidgets/ –

ответ

2

Этот вопрос является хорошим примером того, почему вы всегда должны указывать вкус регулярного выражения, которое вы используете. Большинство разновидностей регулярных выражений обеспечивают способ соответствия границ слов, и большинство из них используют для этого \b. Согласно this page, wxRegEx позволяет выбрать один из трех вариантов: BRE, ERE или ARE. Из них только ARE поддерживает границы слов и использует \y, а не \b. Предполагая, что вы задаете wxRE_ADVANCED при компиляции, это регулярное выражение будет соответствовать любой строке, которая содержит одно из слов good, better или best:

\y(good|better|best)\y 

Судя по примерам, которые вы использовали, я думаю, вы можете быть запутанными регулярными выражениями с шарики. Например, *.[ch] - это глобус, который вы используете для сопоставления имен файлов, заканчивающихся .c или .h; регулярное выражение для этого будет \.[ch]$. На сайте, на котором я связан ранее, есть хорошее учебное пособие по регулярному выражению, но разница, с которой я больше всего беспокоюсь, заключается в том, что регулярное выражение не должно описывать всю строку, как это делает glob. Вот почему мне не нужно было запускать регулярное выражение с .*, но я сделал, чтобы добавить $ в конец, чтобы он не соответствовал строкам вроде foo.cs или bar.html.

+0

Замечательный ответ. Спасибо! У меня недостаточно очков, чтобы дать вам очки, но, по крайней мере, я могу прокомментировать и сказать, что (1) Вы подчеркнули принципиальное различие между глобусом и регулярным выражением.(2) Вы отметили требование для wxRE_ADVANCED (кажется, что он не включен в моей системе, потому что \ y тоже не работает). (3) Вы предоставили отличную ссылку для обзора wxRegEx. Благодаря! –

+0

Ах! Я просто понял, что «укажите wxRE_ADVANCED, когда вы его компилируете», вы имели в виду «вызов wxRegEx :: Compile()». Попробуем сейчас ... –

+0

Да! Оно работает! . \ * \ y (good | better | best) \ y. \ * - спасибо. –

1

good|better|best

Я не знаю, что вы подразумеваете под "элегантный". Насколько мне известно, это довольно элегантно.

+0

Ну, псевдо-регулярное выражение, которое я дал, это ... ** псевдо **. Это не работает. Мне нужен тот, который ** работает **. Я пробовал **. \ * \ B (один | два | три) \ b. \ ***, но это тоже не работает. –

+0

Что значит «не работает»? На каком языке вы используете? Каков ваш вклад и что вы получаете? – CanSpice

+0

Я использую wxRegEx. Не работает, я имею в виду, что он выдает ошибку «Ошибка: неверное регулярное выражение» \ * один | два | три \ * ': операнд квантификатора недействителен ». Он даже не добирается до текста, чтобы соответствовать этапу (интерактивная программа тестирования регулярных выражений). –

Смежные вопросы