【发布时间】:2013-09-06 12:03:47
【问题描述】:
我有一列地址数据,其序号显示如下:
坎布里亚楼 3 楼
2楼223室
当我希望它们改为这样显示时:
坎布里亚楼 3 楼
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>";
但它没有达到预期的效果,并完全按照它最初出现的方式输出。
谢谢
【问题讨论】:
-
您的示例代码中缺少输入字符串定义。此外,对于您概述的情况,代码看起来有点多。请把它减少到一个最小的例子,例如从头开始重写它以隔离唯一的问题。
-
另外你为什么不能使用
strtr并将3Rd替换为3rd和2Nd替换为2nd? -
@hakre 因为我需要一个包罗万象的解决方案,所以当地址有第 4 个、第 9 个等时,我不必逐个写替换......它也应该能够处理平面地址,因此 239A 变为 239a。
-
嗯,会不会是事先对数据应用了一些错误的方法?可能有点晚了,但最好一开始就阻止它。为此,了解环视通常很有帮助:regular-expressions.info/lookaround.html
标签: php string case-sensitive