2011-01-20 3 views
1

RegEx аромат: 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»?

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

+1

Являются ли кавычки частью вашего ввода? – slartidan

+0

Просто мысль: как насчет перемещения символа начала строки из группы и использования вопросительного знака, чтобы сделать группу необязательной? '^ (\ s *)? (good | better | be ...' – Bazzz

+0

@Bazzz Я просто попробовал ваше предложение. То же (неправильное) поведение. –

ответ

2

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

+0

Вы прибиты он работает с (^ *), но почему? Я знаю, что \ s является частью только AREs, но я убедился, что regex скомпилирован с помощью wxRE_ADVANCED, который позволяет использовать ARE. См. здесь документацию: http: // biolpc22. york.ac.uk/wx/docs/html/wx/wx_wxresyn.html#wxresynescapes Возможно ли, что я должен был использовать ** две ** обратной косой черты? –

+0

Отвечая на вопрос: да!Я должен был использовать ** две обратной косой черты, потому что фактическое регулярное выражение является строкой в ​​исходном коде C++. –

+0

@Regex Новичок: Сладкий, рад, что я мог бы помочь. –

0

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

изменяет весь нулевой или -момент захвата, чтобы сделать его нулевым или 0.

+0

Это сделало бы '^' optional. – Jens

0

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

0

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

+0

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

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