我有以下地址字符串示例:
$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"是对第一个捕获的子模式的反向引用。