1

<div></p>with<div><div foo="bar"></p>withのような文字列を置き換えようとしています<div foo="bar">

preg_replace を使用してそれを行うにはどうすればよいですか? 正規表現についてはよくわかりませんが、次のようなことを試していました:

preg_replace( '/(<div.*><\/p)/', '$1', $content);
4

1 に答える 1

1

like 式を使用して[^>]*、次のものを含まないすべてのものに一致させ、何かが存在する場合は、それをグループでキャプチャすることができます ( 0>個以上の前の式に一致するため)。$1()*

これにより、式は次のようになります。

/<div([^>]*)><\/p>/

置換パターンは、<div$1>その後方参照を使用しています。これには、空白と空白を含む他のすべてが含まれています。<div>

それに応じて動作します:

$s1 = '<div></p>';
$s2 = '<div foo="bar"></p>';

echo preg_replace('/<div([^>]*)><\/p>/', '<div$1>', $s1);
// <div>
echo preg_replace('/<div([^>]*)><\/p>/', '<div$1>', $s2);
// <div foo="bar">

そして、あなたが試みていたものに似た別の方法は、<div>構造をユニットとして$1withにキャプチャすることです(<div[^>]*>)。これは、置換式全体になります。

echo preg_replace('/(<div[^>]*>)<\/p>/', '$1', $s1);
// <div>
echo preg_replace('/(<div[^>]*>)<\/p>/', '$1', $s2);
// <div foo="bar">
于 2013-09-19T20:50:06.130 に答える