我有以下示例地址字符串:
$address1 = "Flat 2 House Name 21 Another Road";
如果字符串有单词Flat后跟一个数值,那么我想在数值后面直接放置一个昏迷。接下来,我想看看是否有其他数值实例,如果是,则在每个其他数值之前添加一个昏迷。所以上面的例子需要改为:
"Flat 2, House Name, 21 Another Road"
答案 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;
?>