我尝试转换以下字符串
<p>
string
<b>
bold
<em>italic string</em>
also(bold)
</b>
</p>
到这个字符串
<p>
string
</p> <!--------------------------------------- insert -->
<b>
bold
</b> <!------------------------------------ insert -->
<em>italic string</em>
<b> <!------------------------------------ insert -->
also(bold)
</b>
<p> <!---------------------------------------- insert -->
</p>
我知道这不是有效的 html,但我的项目需要它。
...正则表达式这是一个好方法,但我只是没有得到解决。
整个结构将是动态的,
我的想法是,正则表达式
// open tag close
$regex = '<(.*?)>(.*?)</(.*?)>'
if ($1 != $3) {
$newString = <$1>$2</$1></$3>
}
但不工作!
好吧,我认为有效的是两次连续替换:
1.
^(\s*<(?!/))([^<]+)>(?=[^<]+\n)((?:(?!</\2>)[\s\S])*?)(?=\n *<)(?![^>]*</\2>)
替换为:
$1$2>$3\n$1/$2>
正则表达式101演示 http://regex101.com/r/tH3iO2
2.
/[^>]+>$\n\K([^<>]*?)(^\s*)(?=</([^>]+)>)
替换为:
$2<$3>\n$1$2
正则表达式101演示 http://regex101.com/r/wI1eX5
ideone渲染 http://ideone.com/cF46l2
我不知道为什么 ideone 会转动<>
into <
and >
我不知道如何避免它:(
但这适用于您的样本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)