Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式:删除double<;br/>;标签_Php_Regex - Fatal编程技术网

Php 正则表达式:删除double<;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

我有一个动态字符串,它可能包含h2标记,在这些h2标记中有一些br标记。我想从字符串中删除这些br标记

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的组?

在多个步骤中执行此操作可能会容易得多:

  • 使用正则表达式提取
    序列
  • 使用regex从
    ..
    序列中删除

    标记
  • 编写新字符串
  • 照原样复制其他所有内容

  • 或者,搜索:

    (<\s*h2[^<]*>[^<]*)<\s*br\s*\/\s*>
    
    重复此步骤,直到不再进行更换

    测试



    另一个解决方案(更智能的)是使用适当的HTML解析器,并实现所有您想要的魔法。

    在多个步骤中实现这一点可能要容易得多:

  • 使用正则表达式提取
    序列
  • 使用regex从
    ..
    序列中删除

    标记
  • 编写新字符串
  • 照原样复制其他所有内容

  • 或者,搜索:

    (<\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!谢谢你!谢谢