Регулярное выражение для соответствия нескольких целых слов - PullRequest
3 голосов
/ 15 января 2011

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

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

Спасибо.

Ответы [ 2 ]

2 голосов
/ 15 января 2011

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

\y(good|better|best)\y

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

1 голос
/ 15 января 2011

good|better|best

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

...