preg_ *函数匹配带有量词的子模式

时间:2012-02-22 15:24:39

标签: php regex

我有这种形式的正则表达式:

/(?:^- (.*)$\r*\n*)+/m

目的是匹配以-[space]开头的一行或多行文本。

这种方法很好,除了收集匹配的子模式(.*)。只返回最后一个,并且任何先前的子模式匹配(在结果数组中作为索引0的一部分出现)都将丢失。

我真的需要一些方法来将这些子模式放在一个数组中,所以我可以将它们传递给implode并做我正在尝试用它们做的事情。

我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:2)

也许你可以使用

preg_match_all('/^- (.*)\r\n/m', $subject, $result, PREG_PATTERN_ORDER);
var_dump($result);

例如:

<?php
$subject = "- some line
- some content
- some other content
nothing to match over here
- more things here
- more patterns
nothing to match here
";

preg_match_all('/^- (.*)\r\n/m', $subject, $result, PREG_PATTERN_ORDER);
var_dump($result);
?>

结果:

array(2) {
  [0]=>
  array(5) {
    [0]=>
    string(12) "- some line
"
    [1]=>
    string(15) "- some content
"
    [2]=>
    string(21) "- some other content
"
    [3]=>
    string(19) "- more things here
"
    [4]=>
    string(16) "- more patterns
"
  }
  [1]=>
  array(5) {
    [0]=>
    string(9) "some line"
    [1]=>
    string(12) "some content"
    [2]=>
    string(18) "some other content"
    [3]=>
    string(16) "more things here"
    [4]=>
    string(13) "more patterns"
  }
}