用于匹配mm<;sup>;3<;sup>;


Regex pattern for matching mm <sup>3<sup>

我正试图编写一个正则表达式,将mm3更改为mL:

<?php
$match = 'mm<sup>3</sup>';
if(preg_match('/'b(mm<sup>3</sup>)'b/', $match))
{
    $replacement = 'ml';
    $replac = preg_replace('/'b(mm<sup>3</sup>)'b/', $replacement, $match);
    echo $replac;
}
?>

但是我的正则表达式没有捕获$match变量中的内容,也没有输出$replac值。我做错了什么?

更改:

if(preg_match('/'b(mm<sup>3</sup>)'b/',$match))

至:

if(preg_match('#'bmm<sup>3</sup>'b#',$match))

并且类似地在CCD_ 3呼叫中。

由于正则表达式包含/,因此需要对其进行转义,或者在正则表达式周围使用不同的分隔符。

也不需要括号,因为你没有对这些组做任何事情。

您需要使用preg_quote来清除正则表达式中的/,或者使用不同的分隔符(通常使用#)。

此外,>后面的''b分隔符是不必要的,括号也不是必要的,因为您似乎没有进行捕获;你基本上是在做一个更昂贵的str_replace

最后,你可以一蹴而就。如果没有对手,什么都不会发生。

<?php
    $match = 'mm<sup>3</sup>';
    $replacement='ML';
    $replac = preg_replace('#''bmm<sup>3</sup>#',
                       $replacement,
                       $match);
    echo $replac;
?>

如果你想挑剔,我想你也应该用"ml"代替,而不是"ml":-)

(为了替换多个字符串,preg_replace支持数组)。

注意:除非您确定这是您想要替换的正确HTML,否则您可能应该尝试

$match = 'mm''s*<sup>''s*3''s*</sup>';

为了捕捉mm3和类似的内容,除了mm3(在某些情况下,它们可能看起来很相似,一些编辑器可能会使用或自动将其中一种形式"更正"为另一种形式)。