0

私はpreg_match_allを使用して大きな文字列に一致するパターンを持っています。正しい一致をうまく取得していますが、それらの一致のそれぞれに入り、さらに一致を見つけようとしているようです。最後に空の文字列に。ある種の再帰のように聞こえますが、これは必要ありませんし、したくありません。それを止める方法はありますか?

助けてくれてありがとう!

function getCategories($source)
{
    $categories = array();

    $pattern = "~<span class=.*\n<table class=.*\n<tr>\n<th.*\n<.th>\n<th.*\n<.th>\n<th.*\n<.th>\n<th.*\n<.th>\n<th.*\n<.th>\n<th.*\n<.th><.tr>\n(<tr id=.*\n(.*\n){6}<.td><.tr>(<.table>)?\n)*~";

    preg_match_all($pattern, $source, $categories);

    return $categories;
}

$categories = getCategories($source);

print_r($categories);
4

1 に答える 1

1

.*この動作の理由は、用語を使用するインスタンスが複数あるためです。

この用語は、任意の長さの文字列に対応でき、例の複数の tr タグにまたがることができます。

貪欲でないバージョンを使用する必要があります.*?。それはトリックを行う必要があります。

注: 提案されているように、試みていることを実行するための最善の方法は、DOM 構造を DOMElement または XML として解析することです。

于 2013-10-21T18:21:46.553 に答える