繁体   English   中英

使用PHP从字符串中的行的开头删除数字

[英]remove numbers from beginning of a line in a string with PHP

我在php中有一堆字符串,看起来像这样:

10 NE HARRISBURG
4 E HASWELL
2 SE OAKLEY
6 SE REDBIRD
PROVO
6 W EADS
21 N HARRISON

我需要做的是删除城市名称前面的数字和字母。 我遇到的问题是,不同城市之间的差异很大。 数据几乎不一样。 是否可以删除此数据并将其保存在单独的字符串中?

查看正则表达式和preg_replace $nameOfCity = preg_replace("/^\\d+\\s+\\w{1,2}\\s+/", "", $source);

解释:

  1. ^匹配字符串的开头
  2. \\d+\\s+以一个或多个数字开头,后跟一个或多个空格字符
  3. \\w{1,2}\\s+然后应该有一个或两个字母后跟一个或多个空格字符
  4. 字符串的其余部分应该是城市的名称。

案件未涵盖

  • 如果城市名称前面只有文本限定符
  • 如果城市名称前面只有一个数字限定符
  • 如果只有一个数字限定符,并且城市名称是两个字母长。

如果你想更精确,我假设你可以在城市名称(S|SE|E|NE|N|NW|W|SW)之前枚举所有可能的字母,而不是匹配任何一个或两个字母长的字符串。

对于每一行,试试这个:

$arr = preg_split('/ /', $line);

if(count($arr) === 3)
{
    // $arr[0] is the number
    // $arr[1] is the letter
    // $arr[2] is your city
}
else
{
    // Like "PROVO" no number, no letter
}

是的,这段代码很可靠,但它可以工作......而且它可以保存所有数据。 重要的是使用preg_split而不是弃用的split方法。

看看以下是否适合您:

$new_str = preg_replace('/^([0-9]* \w+ )?(.*)$/', '$2', $str);

如果您想将城市列表作为数组,请尝试:

if(preg_match_all("/(\w+$)/", $source, $_matches)) {
  $cities = $_matches[1];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM