如何使用正则表达式从字符串中删除数字

17

我有一个这样的字符串:

" 23 PM"

我想要移除23,只保留PM或者(去掉空格后)PM

有什么建议吗?

需要使用PHP实现。


3
我会仔细阅读每个答案,为您的需求选择最佳解决方案。有许多不同的答案,其中一些被不必要地投票否定了。 - Andy E
9个回答

61
echo trim(str_replace(range(0,9),'',' 23 PM'));

16

可以使用ltrim来实现。

ltrim(' 23 PM', ' 0123456789');
这将从字符串左侧删除任何数字和空格。如果您需要同时删除左右两侧的字符,可以使用trim。如果您只需要删除右侧的字符,则可以使用rtrim

这正是我在寻找的。 - john Smith

14
preg_replace("/[0-9]/", "", $string);

即使这样也可以匹配所有数字,但我猜在括号后面加上星号会更快,就像我的答案一样。 - Fidi
1
使用星号与不使用星号在速度上并没有太大的区别...即使如此,你所说的时间值在小数点后有4个零(大约0.00001秒),所以除非你在循环中执行它(一个大循环),否则优化这样的语句是没有意义的... - ircmaxell
去除空格并不是主要的观点。但这也很容易做到。只需将空格放入方括号中:[0-9 ] - tomasbelusky

5

也可以使用str_replace,这通常是比正则表达式更快的替代方法。

str_replace(array(1,2,3,4,5,6,7,8,9,0,' '),'', ' 23 PM');
// or
str_replace(str_split(' 0123456789'), '', ' 23 PM');

无论位置如何,它都将替换字符串中的任何数字0-9和空格。

5
如果您只想要字符串的最后两个字符,请使用带有负数起始位置的 substr 函数:
$pm = substr("  23 PM", -2); // -> "PM"

3
点赞以弥补不合理的踩和因为原帖作者没有明确说明他期望的字符串,而Andy明确说明了上面的代码所做的事情。 - Gordon

3
$str = preg_replace("/^[0-9 ]+/", "", $str);

2
这意味着数字必须在左侧,并且至少必须有一个数字。这适用于他提供的示例,但通常情况下,这种解决方案不起作用。那么像“AM 23423NNfB”这样的字符串怎么办?您无法使用正则表达式删除数字。 - Fidi
2
它回答了OP的请求,他没有提到PM后面有什么。 - Toto
他说:“我有一个字符串,类似于……”而主题的标题通常是:“从字符串中删除空格”。因此,我理解为“任何字符串”。 - Fidi

3

正则表达式

preg_replace('#[0-9 ]*#', '', $string);

2
您还可以使用以下内容:
preg_replace('/\d/', '',' 23 PM' );

1

trim()函数通过使用点语法在“字符掩码”参数中允许一系列字符。

代码:(演示)

//              v--------literal spaces
trim(" 23 PM", ' 0..9')
//               ^^^^----all digits
// output: PM

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