如何使用strpos()查找单词的结尾

时间:2016-07-28 08:04:40

标签: php strpos strsplit

我将地址输入作为一个长字符串而不是名称,地址,城市,州和邮政编码。除了地址和城市之间,我把它的大部分分开了。所以我想搜索任何街道类型的名称(法院,道路,街道,大道等),然后在字的末尾分割字符串。然后我将留下地址和城市分开。

strpos()仅向我提供关键字的开头的位置,我希望它在关键字的结束处拆分。 例如,这就是我要做的事情:

John Doe
1 Main Street Anytown
NY
00000

我希望在StreetAnytown之间进行分配。这个地址不会是静态的,可能会有更多的单词等。

另一个想法是自动将字符串拆分为不同字段的函数。有人告诉我,在一些国家,邮政服务有一个API可以做到这一点。 USPS有这样的事吗?他们的网站没有表明它。

4 个答案:

答案 0 :(得分:1)

您可以使用explode函数,该函数使用关键字拆分字符串并返回字符串数组。 使用explode的例子:

$str = '1 Main Street Anytown';        
$array_of_string = explode('street',$str);    

然后$array_of_strings[0]将包含1 Main,而$array_of_strings[1]将包含Anytown

答案 1 :(得分:1)

实际上你应该做的是在大海捞针中寻找多针,总结针的位置和长度。

function strpos_street($string){
    $types = [
   'court', 
   'road', 
   'street', 
   'avenue' 
  ];
  foreach($types as $t){
      $pos = strpos(strtolower($string), strtolower($t));
      if($pos === false) continue;
      else return $pos + strlen($t) - 1;
  }
  return -1;
}

echo strpos_street($string);
  

一些提示:

     
      
  • 考虑案例敏感度
  •   
  • 您可以以相同的迭代方式使用explode函数
  •   
  • 我不确定,但可能有一些地址同时包含" street"和" avenue"字
  •   

答案 2 :(得分:0)

您似乎正在尝试反向搜索,因为strpos默认情况下从开头开始给出字符串的位置,您需要将偏移设置为-1并从strlen中减去。 / p>

strlen($address) - strpos($address, 'Anytown', -1) - 1;
//search from reverse and output position starting from reverse

然而,正如评论中指出的那样,这可能不是解决您试图解决的问题的最佳方法。

答案 3 :(得分:0)

你可以这样做。

$word = "Street"

$pos = strpos($word, $address);
if ($pos !== false) {
    $pos += strlen($word) - 1;
    ...
}

根据要匹配的单词数量,使用正则表达式可能比使用字符串函数更有效。