PHP正则表达式将捕获组变量与数字结合起来

时间:2013-03-15 10:47:09

标签: php regex variables capturing-group

例如,我想将margin:0px;替换为margin:0; 这是我提出的正则表达式:$data = preg_replace('/([^\d])0px/', '$1 0', $data);

$1代表此示例中的:

现在如何将$1与一个数字组合而不用PHP将其解释为另一个捕获组变量而不像我上面那样使用空格?

2 个答案:

答案 0 :(得分:2)

您可以使用'${1}0'。有关详细信息,请参阅PHP documentation on strings

preg_replace documentation也讨论了这一点。

顺便说一句,您可以使用此正则表达式(在5.2.4及更高版本中):

$data = preg_replace('/\D0\Kpx/', '', $data);

\D匹配任何非数字的内容,相当于[^\d]

\K要求它前面的所有内容都匹配,但要将其从匹配本身中排除。因此,您不必存储模式的第一部分并将其包含在替换中。

Here is the documentation on escape sequences

答案 1 :(得分:2)

你试图做这样的事吗?

<?php

function replace_px($val, $new_val, $str) {
  return $new_str = str_replace($val . "px", $new_val, $str);
}

$str = "margin:0px;";
echo replace_px(0, 0, $str);

?>

//输出

margin:0;