2015-08-05 5 views
3

Я пытаюсь извлечь строки, содержащие два слова, разделенные одним или несколькими пробелами из списка. Пример:Perl regex extract два последовательных слова

@a=("aaa12:.", "lala lulu", "erwer", ",", "lala loqw asqwd", "asdas sadsad", "asasd| asq"); 
@b=grep {/\w+\s+\w+/} @a; 

это дает мне

 'lala lulu', 
     'lala loqw asqwd', 
     'asdas sadsad' 

, но я не хочу, чтобы Grep один с тремя словами ...

Я попытался @b=grep {/^\w\s+\w$/}, но тогда я не получаю любые совпадения. Должно быть простым, но я просто не понимаю. Какое регулярное выражение мне нужно здесь?

ответ

5

\w соответствует только одному символу. Вы хотите следующее:

/^\w+\s+\w+\z/ 
  • ^ соответствует началу строки.
  • \w+ соответствует одному из символов «слова».
  • \s+ соответствует одному из символов пробела.
  • \w+ соответствует одному из символов «слова».
  • \z соответствует концу строки.
+0

Отлично, спасибо! – user1981275

+1

@ user1981275 ... принимаю (принимаю) (http://meta.stackexchange.com/questions/23138/how-to-accept-the-answer-on-stack-overflow) ответ .. –

1

I tried @b=grep {/^\w\s+\w$/} but then I don't get any matches

Единственная причина, она не работает, потому что вы кончили квантор (ы) в
начало/конец:

/^\w\s+\w$/ 
    ^^ 

, где он будет работать хорошо, если это были /^\w+\s+\w+$/

Лучший способ сделать это, хотя и добавить некоторую гибкость с пробелами: /^\s*\w+\s+\w+\s*$/

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