我有三种情况,我需要删除数字字符。
STRING200 ,在preg_replace之后我希望 STRING
STRING 100 TEST ,在preg_replace之后我希望 STRING 100 TEST
STRING 400 ,在preg_replace之后我希望 STRING 400
我使用PHP中的preg_replace测试了以下组合
/^(?:[0-9]+\s)*/
/[0-9]*$/
/^[a-zA-Z]+[0-9]*$
但没有成功,有没有人有任何建议?
答案 0 :(得分:1)
您可以在字母后面的1位数字匹配,直到字边界并将其删除:
preg_replace('~[a-zA-Z]\K\d+\b~', '', $s)
请参阅regex demo。
或者如果您需要匹配整个字符串(请参阅another demo):
preg_replace('~^[a-zA-Z]+\K\d+$~', '', $s)
模式详情:
[a-zA-Z]
- ASCII字母\K
- 匹配重置运算符,省略匹配值中匹配的字母\d+\b
- 一个或多个数字,后跟单词边界的结尾。 注意:如果预期在字符串末尾匹配,请将\b
替换为$
(字符串锚定结束)。
A PHP test:
$arr = ['STRING200','STRING 100 TEST','STRING 400'];
foreach ($arr as $s) {
echo preg_replace('~[a-zA-Z]\K\d+\b~', '', $s) . PHP_EOL;
}
// => [ STRING, STRING 100 TEST, STRING 400 ]