1

我一直在使用\K很多,但最近意识到它在低于 v5.2.4 的 PHP 中不起作用。所以我正在寻找一种不同的方式。

<?php
    $html = '<div>hello</div>
        <div class="someclass">hi</div>
        <div class="sample">this text should be included</div>
        <div>bye</div>
    ';
    // $pattern = '/<div.+class=["\']sample["\'].+div>\K/i'; // <-- this doesn't work below v5.2.4
    $pattern = '/(?<=<div.+class=["\']sample["\'].+div>)/i'; // causes an error.
    $array = preg_split($pattern, $html);
    print_r($array);
?>

我已经看到某处(?<=)可以用作替代方案,我尝试过,但它会导致错误。有什么建议吗?

4

2 回答 2

1

我会重新实现split. 在 Perl 中它看起来像下面这样:

my @matches;
while (/\G((?s:.*?)...)/gc) {
   push @matches, $1;
}

push @matches, /\G(.+)\z/sg;
于 2012-09-15T05:43:15.140 回答
0

好的,找到了解决方法。preg_split()接受PREG_SPLIT_DELIM_CAPTURE第四个参数中的标志,因此匹配的字符串可以包含在数组的分隔元素中。我只需要选择一个额外的元素来提取字符串,这并没有太多工作要做。

<?php
    $html = '<div>hello</div>
        <div class="someclass">hi</div>
        <div class="sample">this text should be included</div>
        <div>bye</div>
    ';
    $pattern = '/(<div.+class=["\']sample["\'].+div>)\${0}/i'; 
    $array = preg_split($pattern, $html, null, PREG_SPLIT_DELIM_CAPTURE);
    print_r($array);
?>
于 2012-09-15T05:42:27.470 回答