匹配子模式我有這種形式的一個正則表達式:參看preg_ *函數與量詞
/(?:^- (.*)$\r*\n*)+/m
意圖是匹配文本的一個或多個行與-[space]
啓動。
這工作正常,除了當涉及到收集匹配的子模式(.*)
。只返回最後一個,並且任何先前的子模式匹配(它們出現在結果數組中作爲索引0的一部分)都會丟失。
我真的需要一些方法來獲得這些子模式在一個數組中,所以我可以將它們傳遞給implode
並做我正在嘗試做的事情。
我在這裏錯過了一些明顯的東西嗎?
匹配子模式我有這種形式的一個正則表達式:參看preg_ *函數與量詞
/(?:^- (.*)$\r*\n*)+/m
意圖是匹配文本的一個或多個行與-[space]
啓動。
這工作正常,除了當涉及到收集匹配的子模式(.*)
。只返回最後一個,並且任何先前的子模式匹配(它們出現在結果數組中作爲索引0的一部分)都會丟失。
我真的需要一些方法來獲得這些子模式在一個數組中,所以我可以將它們傳遞給implode
並做我正在嘗試做的事情。
我在這裏錯過了一些明顯的東西嗎?
也許你可以使用
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"
}
}
似乎是一個開始的好地方,但那我會怎麼做一個'preg_replace'呢? – 2012-02-22 15:44:08
我不確定我是否理解。要從最初的'$ subject' var創建一個正則表達式模式,我會做'$ someVar ='/'。implode('|',$ result [1])。'/';'然後使用'$ someOtherVar = preg_replace ($ someVar,$ someReplacement,$ textVar);'(我編輯了一些正則表達式,忽略了'\ r \ n')。如果我誤解了,我很抱歉。 – 2012-02-22 16:05:55
你能否告訴我們輸入的字符串的一些例子嗎? – Toto 2012-02-22 15:40:50