我有一个包含加拿大地区字符串的数组,遵循以下语法:" region(province)"或"地区 - 其他地区 - 其他地区(省)"。可以有任意数量的区域组合在一起,由" - "在同一个字符串中。我想修剪每个字符串中的最后一个空格,括号和来自这些字符串的省名,改为使用这种格式:" region"或"地区 - 其他地区 - 其他地区"。
我怎么能用PHP中的正则表达式(或任何其他方法)来做这个?
答案 0 :(得分:1)
试试这个:
$string = array();
$string[] = "region - other region - other region (province)";
foreach ($string as $str){
echo trim(preg_replace('/(\(.*\))$/','', $str));
}
答案 1 :(得分:1)
为什么不创建这样的简单函数?
function str_before($haystack,$needle)
// returns part of haystack string before the first occurrence of needle.
{
$pos = strpos($haystack,$needle);
return ($pos !== FALSE) ? substr($haystack,0,$pos) : $haystack;
}
然后以这种方式使用它:
$data = str_before($data,' (');
我经常发现,除了正则表达式之外,还必须更易于阅读,因为您需要提问。
答案 2 :(得分:1)
这应该适合你:
$value = 'region - other region - other region (province)';
$result = substr($value, 0, strrpos( $value, ' '));
echo $result;
这会回应
region - other region - other region
或者使用循环,您可以执行以下操作:
$value = array('region - other region - other region (province)');
foreach($value as &$v)
{
$v = substr($v, 0, strrpos( $v, ' '));
}
print_r($value);
哪个会打印出来:
Array ( [0] => region - other region - other region )
答案 3 :(得分:1)
由于preg_replace适用于数组,如何:
$array = preg_replace('/\s+\(.+$/', '', $array);
答案 4 :(得分:1)
在同一个字符串上运行两个正则表达式 (将每个作为全局替换并扩展)
这会删除省份'
找到:\( [^()]* \)
替换:''
这会格式化分隔符
找到:\h* - \h*
替换:' - '
可选,可以修剪前导和尾随空格
找到:^\s+|\s+$
替换:''