我在php中有一堆字符串,看起来像这样:
10 NE HARRISBURG
4 E HASWELL
2 SE OAKLEY
6 SE REDBIRD
PROVO
6 W EADS
21 N HARRISON
我需要做的是删除城市名称前面的数字和字母。我遇到的问题是,不同城市之间的差异很大。数据几乎不一样。是否可以删除此数据并将其保存在单独的字符串中?
答案 0 :(得分:6)
查看正则表达式和preg_replace。 $nameOfCity = preg_replace("/^\d+\s+\w{1,2}\s+/", "", $source);
说明:
^
匹配字符串的开头\d+\s+
以一个或多个数字开头,后跟一个或多个空白字符\w{1,2}\s+
然后应该有一个或两个字母后跟一个或多个空白字符案件未涵盖
如果您想更精确,我假设您可以在城市名称(S|SE|E|NE|N|NW|W|SW)
之前枚举所有可能的字母,而不是匹配任何一个或两个字母长的字符串。
答案 1 :(得分:1)
对于每一行,请尝试以下方法:
$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
方法。
答案 2 :(得分:1)
查看以下内容是否适合您:
$new_str = preg_replace('/^([0-9]* \w+ )?(.*)$/', '$2', $str);
答案 3 :(得分:1)
如果您想将城市列表作为数组,请尝试:
if(preg_match_all("/(\w+$)/", $source, $_matches)) {
$cities = $_matches[1];
}