Php 正则表达式:删除double<;br/>;标签
我有一个动态字符串,它可能包含h2标记,在这些h2标记中有一些br标记。我想从字符串中删除这些br标记Php 正则表达式:删除double<;br/>;标签,php,regex,Php,Regex,我有一个动态字符串,它可能包含h2标记,在这些h2标记中有一些br标记。我想从字符串中删除这些br标记 Headline 1Lorem ipsum door sit amet,consetetur sadipsing eliter.Headline 2 要删除br标记,我使用以下正则表达式: /<h2.*?>.+?(<br[\s+]?\/>).+?<\/h2>/ /.+?().+/ 问题是,我的第一个匹配是Headline 1Lorem ipsum do
Headline 1Lorem ipsum door sit amet,consetetur sadipsing eliter.Headline 2
要删除br标记,我使用以下正则表达式:
/<h2.*?>.+?(<br[\s+]?\/>).+?<\/h2>/
/.+?().+/
问题是,我的第一个匹配是Headline 1Lorem ipsum dolor sit amet,consetetur sadipscing eliter。Headline 2
。
是的,按设计工作:-)但如何使regex仅捕获h2标记中带有br的组?在多个步骤中执行此操作可能会容易得多:
…
序列..
序列中删除
标记或者,搜索:
(<\s*h2[^<]*>[^<]*)<\s*br\s*\/\s*>
重复此步骤,直到不再进行更换
测试
另一个解决方案(更智能的)是使用适当的HTML解析器,并实现所有您想要的魔法。在多个步骤中实现这一点可能要容易得多:
…
序列..
序列中删除
标记或者,搜索:
(<\s*h2[^<]*>[^<]*)<\s*br\s*\/\s*>
重复此步骤,直到不再进行更换
测试
另一个解决方案(更智能的)是使用适当的HTML解析器,并发挥您想要的所有魔力。我建议您使用DOM解析器 但是,如果您真的想使用正则表达式,在这种情况下这是可以接受的,您可以使用preg_replace_回调:
$html = '<h2>Headline 1</h2>Lorem ipsum.<h2>Headline 2 <br /><br /></h2>dolor sit amet,<h2>Headline 2<br /><br /></h2>consetetur<br /> sadipscing elitr<h2>Headline 2</h2>Lorem<br /> ipsum';
# first, extract the string inside <h2>...</h>
$res = preg_replace_callback('~<h2>\K.*?(?=</h2>)~',
function($m) {
# then remove the <br />
return preg_replace('~<br />~', '', $m[0]);
},
$html);
echo $res;
$html='Headline 1Lorem ipsum.Headline 2
dolor sit amet,Headline 2
consetetur
sadipsing eliterheadline 2Lorem
ipsum';
#首先,提取里面的字符串。。。
$res=preg\u replace\u回调(“~\K.*(?=)~”,
功能(百万美元){
#然后,卸下
返回preg_replace(“~
,”,“$m[0]);
},
$html);
echo$res;
输出:
<h2>Headline 1</h2>Lorem ipsum.<h2>Headline 2 </h2>dolor sit amet,<h2>Headline 2</h2>consetetur<br /> sadipscing elitr<h2>Headline 2</h2>Lorem<br /> ipsum
Headline 1Lorem ipsum.Headline 2 dolor sit amet,Headline 2 consetetur
sadipsing eliterheadline 2Lorem
我建议您使用DOM解析器
但是,如果您真的想使用正则表达式,在这种情况下这是可以接受的,您可以使用preg_replace_回调:
$html = '<h2>Headline 1</h2>Lorem ipsum.<h2>Headline 2 <br /><br /></h2>dolor sit amet,<h2>Headline 2<br /><br /></h2>consetetur<br /> sadipscing elitr<h2>Headline 2</h2>Lorem<br /> ipsum';
# first, extract the string inside <h2>...</h>
$res = preg_replace_callback('~<h2>\K.*?(?=</h2>)~',
function($m) {
# then remove the <br />
return preg_replace('~<br />~', '', $m[0]);
},
$html);
echo $res;
$html='Headline 1Lorem ipsum.Headline 2
dolor sit amet,Headline 2
consetetur
sadipsing eliterheadline 2Lorem
ipsum';
#首先,提取里面的字符串。。。
$res=preg\u replace\u回调(“~\K.*(?=)~”,
功能(百万美元){
#然后,卸下
返回preg_replace(“~
,”,“$m[0]);
},
$html);
echo$res;
输出:
<h2>Headline 1</h2>Lorem ipsum.<h2>Headline 2 </h2>dolor sit amet,<h2>Headline 2</h2>consetetur<br /> sadipscing elitr<h2>Headline 2</h2>Lorem<br /> ipsum
Headline 1Lorem ipsum.Headline 2 dolor sit amet,Headline 2 consetetur
sadipsing eliterheadline 2Lorem
你在用什么语言/工具?我在用PHP7.3你在用什么语言/工具?我在用PHP7.3!谢谢你!谢谢