如何在前两个单词后替换单词

时间:2014-05-22 15:30:30

标签: preg-replace

假设我有全名:Wan Ahmad Wan Dollah Karmat。

我希望显示如下:Wan Ahmad W.D.K

我试过这段代码:

preg_replace('/(.)[^\s]+\s?/', '${1}.', strtoupper($_GET['fullname']), 2)

但输出是:W.A.Wan Dollah Karmat

我想要前两个单词并缩短其余单词。请帮忙。

问题解决了,感谢Casimir et Hippolyte。最终的代码是:

preg_replace('~^(?:\s*\S+){1,2}(*SKIP)(*FAIL)|(\S)\S+~', '${1}.', strtoupper($_GET['fullname']))

它的模式问题。

1 个答案:

答案 0 :(得分:0)

您可以使用回溯控制动词(*SKIP)(*FAIL)来避免前两个单词。

$pattern = '~^(?:\s*\S+){1,2}(*SKIP)(*FAIL)|(\S)\S+~';
$result = preg_replace_callback($pattern,
                                function ($m) { return strtoupper($m[1]) . '.'; },
                                $_GET['fullname'] );

简而言之:

如果模式稍后失败,

(*SKIP)会强制与前一个子模式匹配的子字符串不再重试。

(*FAIL)强制模式失败。

相关问题