如何在嵌套preg_matches的上下文中使用preg_replace?

时间:2014-01-14 18:25:22

标签: php regex

PHP中最有效的方法是采用匹配(数字)并用字符串替换它们(在隔离的上下文中)这些数字组中的孤立上下文可能会影响彼此的替换值。

2 个答案:

答案 0 :(得分:1)

您正在寻找的是Number to Words转换器。我建议您使用现有解决方案之一,而不是尝试自己编写代码。这是一个使用this blog中的convert_number_to_words函数:

$output = preg_replace_callback('~(\d+)~', function ($matches) {
    return convert_number_to_words($matches[1]);
}, $testString);

输出:

startz[;thirty-onemendstartz[thirty-fivemend

输出与您的问题中的输出不完全相同,但您可以通过根据您的要求修改功能轻松实现此目的。

答案 1 :(得分:0)

看起来非常复杂,但是......尝试这样的事情:

$result = preg_replace_callback("/\d+/",function($m) {
    $ret = "";
    // if the number starts with zeroes, handle them
    if( preg_match("/^0+/",$m[0],$zeroes)) $ret .= str_repeat("zero",strlen($zeroes[0]));
    // trim leading zeroes
    $number = ltrim($m[0],"0");
    // IMPLEMENT NUMBER-TO-NAME CONVERSION HERE
    // Append result to $ret
    return $ret;
},$teststring);