多行 PHP 正则表达式问题


Multiline PHP Regex problem

我已经尝试过在这里和谷歌中查找...但我无法弄清楚我做错了什么:(

我有这段文字:

C 1 title
comment 1
C 2 title2
comment 2
C 3 title3
comment 3

现在。。。我想做的是

  1. 检查开头的 C。
  2. 捕获数字
  3. 捕获磁贴
  4. 捕获评论

我正在尝试使用此表达式:

preg_match_all("/^C ('d*) (.*)'n(.*)$/im", $body, $match);

但它仅适用于第一组 =(

关于我做错了什么的任何提示???

谢谢!!!!

它按预期工作。

代码段:

<?php
$body = 'C 1 title
comment 1
C 2 title2
comment 2
C 3 title3
comment 3';
preg_match_all("/^C ('d*) (.*)'n(.*)$/im", $body, $match);
print_r($match);
?>

生成以下输出:

Array
(
    [0] => Array
        (
            [0] => C 1 title
comment 1
            [1] => C 2 title2
comment 2
            [2] => C 3 title3
comment 3
        )
    [1] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            )
    [2] => Array
        (
            [0] => title
            [1] => title2
            [2] => title3
        )
    [3] => Array
        (
            [0] => comment 1
            [1] => comment 2
            [2] => comment 3
        )
)

正如你在 Ideone 上看到的那样。

为了使您的比赛分组良好,您可能需要尝试:

preg_match_all("/^C ('d*) (.*)'n(.*)$/im", $body, $match, PREG_SET_ORDER);

相反。

编辑

Ideone 运行: PHP Version => 5.2.12-pl0-gentoo

我还在我的机器上测试了它(并得到了相同的结果),它运行: PHP Version => 5.3.3-1ubuntu9.5

但我无法想象这是一个版本控制的事情(至少,不是 5.x 版本)。也许您的换行符是Windows样式?试试这个正则表达式:

"/^C +('d*) +(.*)'r?'n(.*)$/im"

我使用了换行符'r?'n而不仅仅是'n以便与 Windows 和 Unix 样式的换行符匹配,并且还用 + 替换了单个空格以考虑可能的两个(或更多)空格。