代码之家  ›  专栏  ›  技术社区  ›  user889030

PHP-如何修改匹配的模式并替换

  •  0
  • user889030  · 技术社区  · 4 年前

    我有一个字符串,它的html标记中包含空格

    $mystr = "< h3> hello mom ?< / h3>"

    所以我为它编写了正则表达式来检测其中的空格

    $pattern = '/(?<=&lt;)\s\w+|\s\/\s\w+|\s\/(?=&gt;)/mi';

    接下来,我想通过移除空间并替换来修改匹配项,所以你知道怎么做吗?这样我就可以像 "&lt;h3&gt; hello mom ?&lt;/h3&gt;"

    我知道有php函数 pre_replace 但我不确定如何修改匹配项

    $result = preg_replace( $pattern, $replace , $mystr );

    0 回复  |  直到 4 年前
        1
  •  1
  •   Wiktor Stribiżew    4 年前

    对于您展示的特定标签,您可以使用

    preg_replace_callback('/&lt;(?:\s*\/)?\s*\w+\s*&gt;/ui', function($m) { 
        return preg_replace('/\s+/u', '', $m[0]); 
    }, $mystr)
    

    正则表达式-注意 u 用于处理字符串匹配中Unicode字符的标志

    • &lt; -文字字符串
    • (?:\s*\/)? -由零个或多个空格和 / 烧焦
    • \s* -零个或多个空格
    • \w+ -一个或多个单词字符
    • \s* -零个或多个空格
    • &gt; -文字字符串。

    这个 preg_replace('/\s+/u', '', $m[0]) 匿名回调函数中的第行删除所有空白块(即使是那些非中断的空格)。

        2
  •  1
  •   KIKO Software    4 年前

    你可以保持简单,然后做:

    $output = str_replace(['&lt; / ', '&lt; ', '&gt; '],
                          ['&lt;/',   '&lt;',  '&gt;'], $input);