在PHP中,正则表达式从字符串中删除井号(如果存在)

时间:2010-08-21 03:06:14

标签: php regex

在PHP中,如果存在,我想从十六进制字符串中删除井号(#)。

我尝试了以下内容:

$str = "#F16AD3";

//Match the pound sign in the beginning
if (preg_match("/^\#/", $str)) {
  //If it's there, remove it
  preg_replace('/^\#/', '', $str);
};

print $str;

但它没有用。它打印出#F16AD3

如果它只存在,我怎么能删除它?

7 个答案:

答案 0 :(得分:14)

echo ltrim('#F16AD3', '#');

http://php.net/manual/en/function.ltrim.php

编辑:如果您只是在字符串开头测试英镑符号,则可以使用strpos

if(strpos('#F16AD3', '#') === 0) {
    // found it
}

答案 1 :(得分:6)

您必须将响应分配回变量:

$str = preg_replace('/^\#/', '', $str);

此外,您根本不需要使用preg_match进行检查,这是多余的。

答案 2 :(得分:4)

您没有看到更改的原因是您放弃了preg_replace的结果。您需要将其分配回变量:

//Match the pound sign in the beginning
if (preg_match("/^#/", $str)){
    //If it's there, remove it
    $str = preg_replace('/^#/', '', $str);
};

但请注意,对preg_match的调用完全是多余的。您已经在检查它是否存在于preg_replace中! :)因此,只需这样做:

//If there is a pound sign at the beginning, remove it
$str = preg_replace('/^#/', '', $str);

答案 3 :(得分:3)

如果您只是在字符串的开头寻找一个英镑符号,为什么不使用比正则表达式更简单的东西?

if ($str[0] == '#')
  $str = substr($str, 1);

答案 4 :(得分:1)

@ennuikiller是正确的,没有必要逃脱。此外,您无需检查匹配项,只需将其替换为:

<?php
$color = "#ff0000";

$color = preg_replace("/^#/", "", $color);
echo $color;

?>

<强>输出

ff0000

答案 5 :(得分:1)

为什么要使用preg_replace?

echo str_replace("#","",$color);

答案 6 :(得分:0)

您正在调用两个不同的preg函数,这可能是过度优化,但str_replace('#' , '' , $color)可以更快/更有效地解决您的问题。我相信其他人会回答你的具体正则表达式问题。