如果包含数组,我需要从字符串中删除前几个字符 防爆。字符串
$str1 = "W. San Marcos Blvd";
$str2 = "E. Point Loma Blvd";
$str3 = "East Palomar St"
实施例。阵列
$array = array('S', 'S.', 'N', 'N.', 'E', 'E.', 'W', 'W.', 'South', 'North', 'East', 'West');
在上述情况下,需要从$str1
,$str2
,ans $str3
答案 0 :(得分:2)
$str1 = "W. San Marcos Blvd";
$array = array('S', 'S.', 'N', 'N.', 'E', 'E.', 'W', 'W.', 'South', 'North', 'East', 'West');
$str=explode(" ", $str1);
foreach($str as $key=>$s){
if (in_array($s, $array)) {
unset($str[$key]);
}
}
$str1=implode(" ", $str);
将$ str2或$ str1的$ str1实例用于其他字符串。
答案 1 :(得分:2)
这是一种聪明/可靠的方法,使用正则表达式和preg_replace()
。使用^
锚点和模式中的尾随空格可确保仅删除预期的子字符串。 (如果您发现无法依赖尾随空格的情况,则应使用单词边界(\b
)。
方法(Demo):
$input=["W. San Marcos Blvd","E. Point Loma Blvd","East Palomar St"];
$pattern='/^(?:E(?:\.|ast)?|W(?:\.|est)?|N(?:\.|orth)?|S(?:\.|outh)?) /';
var_export(preg_replace($pattern,'',$input));
输出:
array (
0 => 'San Marcos Blvd',
1 => 'Point Loma Blvd',
2 => 'Palomar St',
)
或者更确切地说,如何处理一个字符串:
$input="W. San Marcos Blvd";
$pattern='/^(?:E(?:\.|ast)?|W(?:\.|est)?|N(?:\.|orth)?|S(?:\.|outh)?) /';
echo preg_replace($pattern,'',$input);
// output: San Marcos Blvd
该模式会压缩您的基数点阵列,同时保持准确性。我已经订购了从最短方向词到最长方向词的替代方案 - 这可以优化速度。这是pattern demo。
答案 2 :(得分:1)
你可以这样做......
$str1 = "W. San Marcos Blvd";
$str2 = "E. Point Loma Blvd";
$str3 = "East Palomar St";
function remove ( $string ) {
$array = array('S', 'S.', 'N', 'N.', 'E', 'E.', 'W', 'W.', 'South', 'North', 'East', 'West');
foreach ($array as $remove) {
$len = strlen($remove);
if ( substr($string, 0, $len) === $remove ) {
$string= substr($string, $len );
}
}
return $string;
}
echo "{$str1}=".remove($str1);
注意它在$ array中找到字符串的方式,这可能比以后的字符串短。因此,在这种情况下,它返回W. San Marcos Blvd=. San Marcos Blvd.
匹配' W'选项,而不是' W。'选项。您可以重新排列数组,使其具有较长的项目。