在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
如果它只存在,我怎么能删除它?
答案 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)
可以更快/更有效地解决您的问题。我相信其他人会回答你的具体正则表达式问题。