2013-02-20 3 views
0

Я использую PCRE, чтобы найти все пары слов во фразе, например. фраза «Быстрая коричневая лиса перепрыгнула через ленивую собаку». следует производитьРегулярные выражения: можно ли взять все слова в тексте попарно?

The quick 
quick brown 
brown fox 
fox jumped 
jumped over 
... 
... 
lazy dog 

Я использую функцию FindAndConsume(), который потребляет оба слова, и я получаю только половину результатов!

The quick 
brown fox 
jumped over 
... 
... 
the lazy 

Так что я пытаюсь найти, если есть способ получить все пары слов.

+0

Я не perl dev, но я могу сделать это на PHP, используя шаблон '\ b \ w +? \ W + \ w +? \ B', но я считаю, что это несовершенно –

+0

@ExplosionPills: Нет, вы не может. Вы получите тот же результат, что и OP. – Amadan

+0

@Amadan ах истина, я неправильно понял –

ответ

1

Регулярные выражения не найдут совпадающих совпадений. Чтобы сделать то, что вы хотите сделать, я предлагаю вам сначала разделить текст на слова, а затем использовать обычный цикл для извлечения элементов со своими соседями.

В качестве альтернативы вы можете поместить второе слово в свое регулярное выражение в lookahead и зафиксировать его: (\w+)(?=\W+(\w+)\b) - но убедитесь, что вы получили захваты, а не совпадения (так как в матчах будет только первое слово).

+0

Работал отлично. Благодаря ! Я также нашел другое решение (не очень хорошее): после сканирования, как и я, удалите первое слово из фразы и снова сканируйте - вы получите вторую половину пар слов ;-) – Wartin