我正试图编写一个正则表达式,将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(在某些情况下,它们可能看起来很相似,一些编辑器可能会使用或自动将其中一种形式"更正"为另一种形式)。