PHP Word后跟一个数值

时间:2015-02-19 23:21:33

标签: php string

我有以下示例地址字符串:

$address1 = "Flat 2 House Name 21 Another Road";

如果字符串有单词Flat后跟一个数值,那么我想在数值后面直接放置一个昏迷。接下来,我想看看是否有其他数值实例,如果是,则在每个其他数值之前添加一个昏迷。所以上面的例子需要改为:

"Flat 2, House Name, 21 Another Road"

2 个答案:

答案 0 :(得分:0)

        $s="Flat 2 House Name 21 Another Road";
        echo preg_replace('@(flat \d+)@i','$1,',$s);

编辑(抱歉 - 没看到这应该在随后的数字之前插入其他逗号)

    $s="The Flat 2 House Name 21 Another Road";
    echo preg_replace('@(\sflat \d+|\d+)@i','$1,',$s);

这似乎可以按照你的要求运作。

    $search=array(
        '@(?<=flat)\s(\d+)@i',
        '@(?<!flat)\s(\d+)@i'
    );
    $replace=array( ' $1,', ', $1' );
    echo preg_replace( $search, $replace, $s );

上述(最终)版本使用了lookbehind正则表达式模式。最初的模式是一种积极的“后视”模式,表示“匹配数字前面是平面”,第二种模式是负面的后视,并且说“匹配数字之前没有平面”,这就是我认为的结果。 'i'开关使其不区分大小写。 '$ 1'是对第一个捕获的子模式的反向引用。

答案 1 :(得分:0)

编辑:

 <?php

$address1 = "Fre 2 House Name 21 Another Road";

$ex = explode(' ', $address1);
$cant = 0;
$out = '';

for($i = 0; $i < count($ex); $i++) {

    if(is_numeric($ex[$i])) {
        $cant++;

            if($cant == 1 && $ex[$i - 1] == 'Flat') {
      $out .= ' ' . $ex[$i] . ', ';
  } else {
      $out = trim($out);
      $out .=  ', ' . $ex[$i] . ' ';
  }

    } else {
        $out .= $ex[$i] . ' ';
}
}

echo $out;

?>