正则表达式匹配包含'a'或'an'的消息

时间:2014-01-23 01:44:05

标签: php regex

好的,这是输入消息:

  

你有耳朵   你有一个冰块
  你有一只狗   你有一个苹果   你有一块石头

我正在尝试获得这样的输出:

  


  冰块
  狗
  苹果
  摇滚

我该如何做到这一点?

以下是我目前的代码:

<?php
$str = $_POST["txtarea"];

preg_match_all('/You have (a|an) (.*)/', $str, $matches);
array_shift($matches);
foreach($matches[0] as $child) 
{
    echo $child;
}

?>

整个(a | an)部分无效。

2 个答案:

答案 0 :(得分:8)

您的匹配位于$matches[2]元素中。

0 - 是整个匹配的字符串
1 - 第一组(您的情况为a|an
2 - 必填组

要排除您使用?:提示的群组,例如(?:a|an)

PS:对于“a或an”匹配,实际上可以使用不需要括号的an?

答案 1 :(得分:0)

<?php

$str = 'You have an ear
You have an ice cube
You have a dog
You have an apple
You have a rock';

preg_match_all('/You have (a|an) (.*)/', $str, $matches);

foreach($matches[2] as $child) 
{
    echo $child;

}

你正在迭代数组的错误元素