2

私はこのHTMLタグを持っています:

<div class="title">Copy me if you can</div>

だから私はpreg_matchを使って「できればコピーして」と言いたいのですが私はこのpregパターンを使っています:

$preg = "<div class=\"title\">(.+?)</div>";

だから私はこのコードを書きました

$match = preg_match($preg,$content);

ブラウザの出力:

Warning: preg_match() [function.preg-match]: Unknown modifier '('

4

5 に答える 5

4

区切り文字を忘れました

$preg = '~<div class="title">(.+?)</div>~';

パターンの最初の文字は、常に使用する区切り文字を定義します。あなたの場合、その<ので、終了区切り文字は>です。その後のすべては、特定の動作を変更する特別な修飾子として使用されます。(は有効な修飾子ではありません。それがエラーメッセージがあなたに伝えたかったことです:)

于 2011-05-09T19:06:39.803 に答える
1

正規表現に区切りを追加する必要があります。これを試して:

$preg = "/<div class=\"title\">(.+?)<\/div>/";

/正規表現の開始と終了を示す区切り文字です。区切り文字の理由は、正規表現にフラグを追加できるようにするためです。これらのフラグは、正規表現の後に挿入されます。例:

$preg = "/<div class=\"title\">(.+?)<\/div>/i";

i正規表現検索で大文字と小文字を区別しないようにマークを付けて、修飾子として追加しました。

于 2011-05-09T19:05:52.750 に答える
1

試す :$preg = '/<div class="title">([^<]+)</div>/';

于 2011-05-09T19:07:01.707 に答える
1

私は同じ問題を抱えており、同じことができるのではないかと考えています。 /woocommerce-gateway-dibs-form/gateway-dibs.php 行 707

これがコードです: if ( preg_match($_SERVER["REQUEST_URI"], 'woocommerce/dibscancel') !== false) {

        header("HTTP/1.1 200 Ok");

        $callback = new WC_Gateway_Dibs;
        $callback->cancel_order(stripslashes_deep($_REQUEST));
        return;
    }
于 2013-05-18T10:02:02.087 に答える
1

個人的には、HTML が関係するときは、事実上の区切り文字から離れて/# を代わりに使用するので、HTML の終了タグをエスケープすることを覚えておく必要はありません。

$preg = '#<div class="title">([^<]+)</div>#';
于 2011-05-09T19:37:03.030 に答える