如何从字符串中删除字符?

5

我有很多字符串,需要删除开头处的'0',但是怎样做更好呢?以下是一些字符串的示例:

0130799.jpg //I need to get 130799
0025460.jpg //I need to get 25460

现在,我正在使用substr函数,但我认为如果我使用正则表达式会更有效率,对吗?


关于正则表达式的效率与其他方法相比,请参见: https://dev59.com/jk_Sa4cB1Zd3GeqP-jyK - Kevin Burton
4个回答

11

只需进行类型转换即可高效完成

echo (int) $var;

确实,这很容易!非常感谢! - bahamut100

3
如果所有字符串的格式都相同([数字].jpg),那么您可以这样做:
intval('0130799.jpg', 10);

intval() in Manual


0

如果您使用substr,则必须与strpos一起使用,因为substr需要知道字符串索引。

是的,您最好使用正则表达式。

如果您的问题是如何从字符串00000ddddddd.jpg(对于某些零和非零数字)任何位置中提取数字,则应使用preg_match。

这是一个完整的示例,您可以在http://writecodeonline.com/php/上尝试。

preg_match('/([1-9][0-9]+)\.jpg/', "I have a file called 0000482080.jpg somewhere", $matches);
echo "I like to call it: {$matches[0]}";

如果整个字符串是文件名,则使用其他答案中建议的intval或强制类型转换。

这种方式对于字符串“000AA00”可以吗?结果中包含“AA00”吗? - bahamut100
糟糕!好发现。我编辑了我的答案,这样它就不会捕捉到前导零。非常抱歉。 - Ray Toal

0

使用正则表达式,您只需执行以下操作

preg_replace('/^0+/m','',$sourcestring);

^ 是字符串的开头(这里使用 m 修饰符表示行的开头)

0+ 表示一个或多个零。

这个正则表达式将匹配所有前导零并替换为空字符串。

Regexr 上查看它


作为对Ray Toal的回答,这种方式对于"000AA00"字符串可以吗?结果中会有"AA00"吗? - bahamut100
@bahamut100,我添加了一个正则表达式测试工具的链接,您可以在那里查看。是的,它也会从“000AA00”中删除前导0,这是您想要的吗? - stema

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接