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

您可以使用一个表达式[^>]*来匹配所有内容,但不包括下一个>,并将其捕获到$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 回答