preg_match用于评论的某些部分

时间:2012-11-13 04:05:21

标签: php regex preg-match preg-match-all preg-replace-callback

我想找到评论的某些部分。以下是一些例子

/*
 * @todo name another-name taskID
 */

/* @todo name another-name taskID */

目前正在使用以下正则表达式

'/\*[[:space:]]*(?=@todo(.*))/i'

返回以下内容:

* @todo name another-name taskID
or
* @todo name another-name taskID */

我怎样才能得到@todo和名字,但不是任何星号?

期望的输出

@todo name another-name taskID
@todo name another-name taskID

1 个答案:

答案 0 :(得分:1)

试试这个:

$str=<<<STR
/*
 * @todo name another-name taskID 1
 */

/* @todo name another-name taskID 2 */
STR;
$match=null;
preg_match_all("/\*[[:space:]]*(@todo[^(\*\/$)]*)/i",$str,$match,PREG_SET_ORDER);
print_r($match);

回声

Array
(
    [0] => Array
        (
            [0] => * @todo name another-name taskID 1

            [1] => @todo name another-name taskID 1

        )

    [1] => Array
        (
            [0] => * @todo name another-name taskID 2 
            [1] => @todo name another-name taskID 2 
        )

)

虽然不是一个完美的解决方案(注意$match[0][0]中的行结尾)。