我已经尝试过在这里和谷歌中查找...但我无法弄清楚我做错了什么:(
我有这段文字:
C 1 title
comment 1
C 2 title2
comment 2
C 3 title3
comment 3
现在。。。我想做的是
- 检查开头的 C。
- 捕获数字
- 捕获磁贴
- 捕获评论
我正在尝试使用此表达式:
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 样式的换行符匹配,并且还用 +
替换了单个空格以考虑可能的两个(或更多)空格。