我有这种形式的正则表达式:
/(?:^- (.*)$\r*\n*)+/m
目的是匹配以-[space]
开头的一行或多行文本。
这种方法很好,除了收集匹配的子模式(.*)
。只返回最后一个,并且任何先前的子模式匹配(在结果数组中作为索引0的一部分出现)都将丢失。
我真的需要一些方法来将这些子模式放在一个数组中,所以我可以将它们传递给implode
并做我正在尝试用它们做的事情。
我错过了一些明显的东西吗?
答案 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"
}
}