$string = "Hello «USER_ID#USERNAME#STATUS», do you like «PROD_ID#PRODNAME#STATUS»?";
preg_match_all('/«(.*)#(.*)#(.*)»/U',$string,$matches);
echo '<pre>';
var_dump($matches);
echo '</pre>';
給
array(4) {
[0]=>
array(2) {
[0]=>
string(25) "«USER_ID#USERNAME#STATUS»"
[1]=>
string(25) "«PROD_ID#PRODNAME#STATUS»"
}
[1]=>
array(2) {
[0]=>
string(7) "USER_ID"
[1]=>
string(7) "PROD_ID"
}
[2]=>
array(2) {
[0]=>
string(8) "USERNAME"
[1]=>
string(8) "PRODNAME"
}
[3]=>
array(2) {
[0]=>
string(6) "STATUS"
[1]=>
string(6) "STATUS"
}
}
注意使用Ungreedy開關。
我敢肯定有人會沿很快修改正則表達式,以便它的固有ungreedy
對不起,壞,IO複製的樣本,以節省代碼的編寫,並擊中downvote,給你一個給予好評的不便並且你的代碼是可以的 – RobertPitt 2010-08-19 15:08:15
@Robert - 你最好使用Artefacto的例子,它使得模式不被理解,而不是非理性的開關;但無論如何感謝 – 2010-08-19 15:11:43
我的例子是下面,我不使用貪婪匹配,'(?。*?)' –
RobertPitt
2010-08-19 15:18:33