Сгруппировать регулярное выражение, чтобы соответствовать строке, которая * иногда * начинается с пробелов? - PullRequest
1 голос
/ 20 января 2011

RegEx flavor: wxRegEx .

Я пытаюсь создать "сгруппированное" регулярное выражение, соответствующее строке, которая иногда начинается с пробела.Когда он не начинается с пробела, он начинается с целевой группы (второе выражение в скобках в следующем примере).Это относительно простая строка, состоящая из нескольких предсказуемых токенов и одной части произвольного текста, например,

"good: Sed ut perspiciatis unde omnis iste natus error "
"better: Sit voluptatem accusantium doloremque laudantium "
"best: Nemo enim ipsam voluptatem quia voluptas "
" ok: Sit voluptatem accusantium doloremque laudantium "

Примечание : символы в кавычках не частьмой вклад.Вводя цитаты в своем сообщении, я пытаюсь сделать границы каждой строки / строки более четкими.

Регулярное выражение, которое я придумал, чтобы соответствовать вышеприведенному «сгруппированному» образом (т.е. я могукаждая группа отдельно для дальнейшей обработки):

(^\s*)(good|better|best|ok)(: )(.*)( $)

Примечание : \ s - это сокращение класса от wxRegEx для [[: space:]].

Проблема в том, что это регулярное выражение работает только тогда, когда строка фактически начинается с пробела.Зачем?разве «*» сразу после «\ s» не означает «0 или более вхождений \ s»?

Я знаю, что мне здесь не хватает чего-то фундаментального, но что это?

Ответы [ 4 ]

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

Вы пробовали это с (^ *) вместо (^\s*)?Возможно, вы ошибаетесь в синтаксисе \s?Я сам не знаю wxRegEx.

0 голосов
/ 20 января 2011

Я не вижу очевидной ошибки в вашем регулярном выражении. Ваша интерпретация * также верна, конечно. Возможно, у вас есть какие-то реальные пробелы в вашем выражении? Пробел (например, -> <-) не имеет специального значения в регулярном выражении, и движок будет пытаться соответствовать ему. Если ваша первая группа захвата выглядела как <code>(^ \s*), это имело бы эффект, который вы описали.

0 голосов
/ 20 января 2011

Это странно ... вы правы, что * должны соответствовать 0 или более вхождений ... Имеет ли значение перемещение каретки (^) за пределы группы?

0 голосов
/ 20 января 2011

Я не знаком с wxRegEx, но если это PCRE, думаю, вы захотите (^ \ s *)? (Хорошо | ...

'?' изменяет весь захват «ноль или больше», чтобы сделать его «ноль или один».

...