0 レビュー
1 回答
php-正規表現で動的用語を2回検索する
PHPの正規表現の用語の動的な部分を置き換えることができることを知っています:
preg_replace('/(test1)(test2)(test3)/',"$3$2$1",$string);
(どういうわけか、これが正しいかどうかはわかりませんが、私が探しているものではありません)
次のように正規表現でそれが必要です:
preg_match_all("~<(.*)>.*</$1>~",$string,$matches);
「<」と「>」の間の最初の部分は動的であり(したがって、htmlに存在するすべてのタグ、さらには独自のxmlタグも見つけることができます)、同じ正規表現でもう一度参照したいと思います。
しかし、それは私にはうまくいきません。これも可能ですか? PHP5.3のサーバーがあります
/編集:
私の最終目標はこれです:
eを含むhtmlページがある場合。 g。次のソースコード: HTML
<html>
<head>
<title>Titel</title>
</head>
<body>
<div>
<p>
p-test<br />
br-test
</p>
<div>
<p>
div-p-test
</p>
</div>
</div>
</body>
</html>
処理後は次のようになります
$htmlArr = array(
'html' => array(
'head' => array('title' => 'Titel'),
'body' => array(
'div0' => array(
'p0' => 'p-test<br />br-test',
'div1' => array(
'p1' => 'div-p-test'
)
)
)
));
わからない
0
レビュー
答え :
解決策:
置換文字列のプレースホルダーは、 $1
構文を使用します。正規表現自体では、これらはバックリファレンスと呼ばれ、構文 \1
のバックスラッシュと番号に従います。
http://www.regular-expressions.info/brackets.html
あなたの場合:
preg_match_all( "〜<(。*?)>。*?〜"、$ string、$ matches);
PHP文字列ではバックスラッシュ自体がエスケープされるため、ここではバックスラッシュが2倍になっています。 (特に二重引用符で囲まれた文字列の場合、それ以外の場合はASCII記号になります。)
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。