删除始终为相同模式的字符串的最后部分

时间:2014-08-28 14:42:59

标签: php regex string

我有一个包含加拿大地区字符串的数组,遵循以下语法:" region(province)"或"地区 - 其他地区 - 其他地区(省)"。可以有任意数量的区域组合在一起,由" - "在同一个字符串中。我想修剪每个字符串中的最后一个空格,括号和来自这些字符串的省名,改为使用这种格式:" region"或"地区 - 其他地区 - 其他地区"。

我怎么能用PHP中的正则表达式(或任何其他方法)来做这个?

5 个答案:

答案 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)

在同一个字符串上运行两个正则表达式 (将每个作为全局替换并扩展)

  1. 这会删除省份'
    找到:\( [^()]* \)
    替换:''

  2. 这会格式化分隔符 找到:\h* - \h*
    替换:' - '

  3. 可选,可以修剪前导和尾随空格
    找到:^\s+|\s+$
    替换:''