RegEx для поиска слов с не только одним пробелом между ними - PullRequest
4 голосов
/ 11 августа 2010

Мне нужна помощь с проблемой RegEx:

Я хочу найти вхождения двух известных слов (например, "foo" и "bar"), у которых есть пробелы, отличные от ТОЛЬКО ОДНОГО ПРОБЕЛА между ними.

В тексте, который мне нужно найти, могут быть пробелы, символы табуляции, символы CR, LF или любая их комбинация между двумя словами.

В словах RegEx: Мне нужно одно регулярное выражение, которое соответствует "foo[ \t\n\r]+bar", но НЕ соответствует "foo bar".

Все, что я до сих пор пробовал, либо пропускало некоторые комбинации, либо соответствовало единственному пробелу, который не должен совпадать.

Заранее спасибо за любые решения.

РЕДАКТИРОВАТЬ: Чтобы уточнить, я использую Perl-совместимый RegEx здесь.

Ответы [ 3 ]

4 голосов
/ 11 августа 2010

Вы также можете использовать отрицательный заголовок:

foo(?! \b)\s+bar

Если заголовки не поддерживаются, вы можете написать это явно:

foo(?:[^\S ]| \s)\s*bar

Выражение [^\S ] включает двойной отрицательныйэто может быть не сразу очевидно, как это работает.Если вы работаете с логикой, это означает любые пробелы, кроме пробела.

1 голос
/ 11 августа 2010

Вы можете использовать (при условии ERE, то есть grep -E)

foo[:space:]{2,}bar

Синтаксис x{min,} означает, что шаблон x должен появляться не менее min раз.


Если под «кроме ТОЛЬКО ОДНОГО ПРОБЕЛА» вы подразумеваете, кроме символа пробела 0x20, вам нужно чередование:

foo([\t\n\r]|[ \t\n\r]{2,})bar
0 голосов
/ 11 августа 2010

использовать [: пробел:] {2,}

{2,} означает 2 или более

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...