仅当它跟在数字后面时,如何从字符串中删除字符?

How to remove a character from a string only if it follows a number?

我有几行地址格式的数据,我想从每个地址中删除门牌号。

到目前为止,我已经能够使用以下方法删除号码:

<?php
$string = '25a Test Lane';
if (preg_match("/[0-9]/", $string)) {
  $string = preg_replace("/[0-9]/", "", $string);
}
?>

$string 然后变为 'a Test Lane' - 但我将如何删除 'a' 呢?请记住 'a' 可以是数字后面的任何字母。我想删除紧跟数字的任何字符(中间没有 space)。

您可以使用

trim(preg_replace("/\b\d+[a-zA-Z]*\b/", "", $string))
trim(preg_replace("/\b\d+[a-zA-Z]?\b/", "", $string))

这里是regex demo注意:如果您只想在数字后添加一个字母,请将 [a-zA-Z]* 中的 * 替换为 ?

详情:

  • \b - 单词边界
  • \d+ - 一位或多位数字
  • [a-zA-Z]* - 零个或多个 ASCII 字母
  • [a-zA-Z]? - 一个或零个 ASCII 字母
  • \b - 单词边界。

参见 PHP demo:

$string = '25a Test Lane';
$string = trim(preg_replace("/\b\d+[a-zA-Z]*\b/", "", $string));
echo $string;
// => Test Lane