0

あらかじめ決められたパターン内のすべての単語を選択しようとしていますが、うまくいきません:

$html = "<tooltip>Do</tooltip> you<tooltip>know</tooltip>";

preg_match_all を返したい

配列 ( [0] => 配列 ( [0] => 行う) [1] => 配列 ( [0] => 知っている ) )

このパターンの使用:

preg_match_all("/<tooltip ?.*>(.*)<\/tooltip>/", $html, $matches);

代わりに、次のように返されます。

配列 ( [0] => 配列 ( [0] => 知っていますか ) [1] => 配列 ( [0] => 知っています ) )

間違っているのは私のパターンだと思いますが、何がわかりませんか?>

何か案は?

ありがとう

4

4 に答える 4

1

これは完全ではありませんが、データを選択するための正規表現は正常に機能しています。配列を構築する方法は、探しているものと完全には一致しません。でも、ちょっと工夫すればわかると思います

<?php
$html = "<tooltip>Do</tooltip> you<tooltip>know</tooltip>";
preg_match_all("~<tooltip>(.*?)<\/tooltip>~", $html, $matches);
print_r($matches);

foreach($matches[0] as $key => $value) {
    $arr[] = $value;
}

print_r($arr);
?>

$arr は、Array ( [0] => Do [1] => know )探しているものに近いものを返します。

于 2013-10-16T09:40:17.273 に答える
0

私は正規表現の専門家ではありません。Expresso を使用して機能するものを構築していますが、使用できる正規表現が最高または最も堅牢であるとは言いません。

ただし、これは機能するようです

<tooltip[^>]*>(.*?)</tooltip>

それで:

preg_match_all("/<tooltip[^>]*>(.*?)<\/tooltip>/", $html, $matches);
于 2013-10-16T09:40:24.753 に答える
0

これを試して:

preg_match_all("/<tooltip>([^<]+)<\/tooltip>/is", $html, $out);

目的の出力が得られますが、$out[0] ではなく $out[1] にあります。

[1] => Array
    (
        [0] => Do
        [1] => know
    )
于 2013-10-16T09:58:28.120 に答える
0

この SO投稿を確認して、HTML の解析に正規表現を使用しない理由を確認してください。

正規表現を使用してhtmlを抽出することに固執する場合は、@Leeが提供する正規表現を使用してください

<tooltip[^>]*>(.*?)</tooltip>

ただし、(および他の多くの) 場合は失敗します。

<tooltip attr="some > pretend > stuff">Do</tooltip> you<tooltip>know</tooltip>

上記はあなたには決して起こらないかもしれません。プログラミングには多くの保証はありませんが、もし保証されていないなら、あなたはそれを受け入れません。DomDocumentは、html でその保証を提供します。あなたの電話

于 2013-10-16T10:06:35.587 に答える