我正在浏览一个字符串并处理! - 和 - !之间的所有元素。但只有独特的元素才是流程。当我有! - 示例 - !在文本中还有一点! - example-- !,第二个被忽略。
这是代码:
while ($do = preg_match("/!--(.*?)--!/", $formtext, $matches)){
我知道preg_match_all,但需要使用preg_match。
有任何帮助吗?提前谢谢!
答案 0 :(得分:4)
您希望PHP在上一场比赛后仅查找匹配项。为此,您需要使用PREG_OFFSET_CAPTURE标志捕获字符串偏移量。
示例:
$offset = 0;
while (preg_match("/!--(.*?)--!/", $formtext, $match, PREG_OFFSET_CAPTURE, $offset))
{
// calculate next offset
$offset = $match[0][1] + strlen($match[0][0]);
// the parenthesis text is accessed like this:
$paren = $match[1][0];
}
有关详细信息,请参阅preg_match文档。
答案 1 :(得分:3)
修改:一些澄清产量:
$string = '!--example--! asdasd !--example--!';
//either this:
$array = preg_split("/!--(.*?)--!/",$string,-1,PREG_SPLIT_DELIM_CAPTURE);
var_dump($array);
array(5) {
[0]=>
string(0) ""
[1]=>
string(7) "example"
[2]=>
string(10) " asdasd "
[3]=>
string(7) "example"
[4]=>
string(0) ""
}
//or this:
$array = preg_split("/(!--(.*?)--!)/",$string,-1,PREG_SPLIT_DELIM_CAPTURE);
var_dump($array);
array(7) {
[0]=>
string(0) ""
[1]=>
string(13) "!--example--!"
[2]=>
string(7) "example"
[3]=>
string(10) " asdasd "
[4]=>
string(13) "!--example--!"
[5]=>
string(7) "example"
[6]=>
string(0) ""
}
答案 2 :(得分:0)
while ($do = preg_match("/[!--(.*?)--!]*/", $formtext, $matches)){
指定模式末尾的*以指定多个。它们都应该添加到$ matches数组中。