Perl正则表达式提取两个连续的单词

时间:2015-08-05 15:38:24

标签: regex perl grep pattern-matching

我正在尝试从列表中提取包含两个由一个或多个空格分隔的单词的字符串。 例如:

@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'

但是我不想用三个字来点击那个......

我尝试了@b=grep {/^\w\s+\w$/},但后来没有得到任何匹配。应该很简单,但我只是不明白。我需要哪个正则表达式?

2 个答案:

答案 0 :(得分:5)

\w只匹配一个字符。您需要以下内容:

/^\w+\s+\w+\z/
  • ^匹配字符串的开头。
  • \w+匹配其中一个" word"字符。
  • \s+匹配一个或多个空白字符。
  • \w+匹配其中一个" word"字符。
  • \z匹配字符串的结尾。

答案 1 :(得分: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*$/