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()4 番目のパラメーターでフラグを受け入れるPREG_SPLIT_DELIM_CAPTUREため、一致する文字列を配列の区切られた要素に含めることができます。文字列を抽出するために追加の要素を 1 つ選択するだけで済み、それほど多くの作業は必要ありません。

<?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 に答える