后面跟一个数字值的PHP Word


PHP Word followed by a numeric value

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

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

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

"Flat 2, House Name, 21 Another Road"

编辑:

 <?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;
?>
        $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 );

上面的(最终)版本使用了lookbackingregex模式。第一种模式是一种积极的"向后看"模式,它说"匹配前面有平的数字",第二种模式是消极的向后看,它说‘匹配前面没有平的数字’,我认为这就是你想要的。"i"开关使其不区分大小写。"$1"是对第一个捕获的子模式的反向引用。