我有一列地址数据,其序号显示如下:
Cumbrian House 3 楼
2 楼 223 房间
当我希望它们像这样显示时:
3 楼,Cumbrian House
2 楼 223 房间
我正在尝试使用 preg_replace 函数将紧跟在数字后面的大写字母换成小写字母。 (我承认这是我第一次使用 preg_replace 函数。不过我对 preg_match 和正则表达式没问题)。
到目前为止我有:
$string = '3Rd Floor, Cumbrian House';
$ordinalregex = '/(^.*\d+)([A-Z])/';
$correctordinal = '$1'.strtolower('$2');
echo preg_replace($ordinalregex,$correctordinal,$string)."<br>";
但它并没有达到预期的效果,输出的线条与它第一次出现时完全一样。
谢谢
最佳答案
我认为你需要使用 preg_replace_callback因为我不确定您是否可以根据您在普通 preg_replace 中匹配的部分进行替换。您需要做的是使用一个回调函数,该函数接受匹配数组并对其进行处理(您也可以只使用 preg_match,然后单独处理匹配项)。
此示例有效(尽管它使用匿名函数进行回调,这需要 PHP 5.3.0+):
function fixOrdinals($string) {
return preg_replace_callback("/[0-9][A-Z]/",
function ($matches) {
return strtolower($matches[0]);
},
$string
);
}
echo fixOrdinals("3Rd Floor, Cumbrian House")."\n";
echo fixOrdinals("Room 223, 2Nd Floor")."\n";
echo fixOrdinals("4Th Room, 2Nd Floor")."\n";
输出:
3rd Floor, Cumbrian House
Room 223, 2nd Floor
4th Room, 2nd Floor
https://stackoverflow.com/questions/18657425/