1

指定された文字列を検出し、そのラッピング要素を取得する preg_match コードが必要です。次のような文字列とhtmlコードがあります。

$string = "My text";
$html = "<div><p class='text'>My text</p><span>My text</span></div>";

したがって、次のように文字列をラップする要素を返す関数を作成する必要があります。

$element = get_wrapper($string, $html);

function get_wrapper($str, $code){
    //code here that has preg_match and return the wrapper element
}

<p class='text'></p>およびの 2 つの可能な戻り値があるため、戻り値は配列になります。<span></span>

指定された文字列をラップする HTML 要素を取得する方法について、誰でも正規表現パターンを教えてもらえますか?

ありがとう!回答をお待ちしております。

4

3 に答える 3

0

正規表現がdom解析の領域で正解ではない場合でも、私は別の(非常に単純な)解決策を考え出しました。

<[^>/]+?>My String</.+?>

htmlが適切な場合(つまり、終了タグがある場合、<は<などに置き換えられます)。このようにして、最初の正規表現グループに開始タグがあり、2番目の正規表現グループに終了タグがあります。

于 2012-07-31T09:34:36.207 に答える
0

単純なパターンは次のようになりますが、多くのことを想定しています。これらでは正規表現を使用しないでください。よりインテリジェントな Simple HTML DOM パーサーのようなものを検討する必要があります。

とにかく、ラッパー タグと周囲の html 要素に一致する正規表現は次のとおりです。

 /[A-Za-z'= <]*>My text<[A-Za-z\/>]*/g
于 2012-07-31T07:06:19.500 に答える
0

このタスクに正規表現を使用するのは悪い考えです。DOMDocument を使用できます

$oDom = new DOMDocument('1.0', 'UTF-8');
$oDom->loadXML("<div>" . $sHtml ."</div>");
get_wrapper($s, $oDom);

再帰的に実行した後

function get_wrapper($s, $oDom) {
    foreach ($oDom->childNodes AS $oItem) {
        if($oItem->nodeValue == $s) {
            //needed tag - $oItem->nodeName
        }
        else {
            get_wrapper($s, $oItem);    
        }
    }
}
于 2012-07-31T07:05:13.063 に答える