php preg_replace删除号码开始字符串和execption

时间:2017-07-21 17:38:49

标签: php regex preg-replace

我有三种情况,我需要删除数字字符。

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]*$

但没有成功,有没有人有任何建议?

1 个答案:

答案 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 ]