假设我的全名是:万·艾哈迈德·万·多拉·卡马特。
我想展示的是:万·艾哈迈德·D.K
我试过这个代码:
preg_replace('/(.)[^\s]+\s?/', '${1}.', strtoupper($_GET['fullname']), 2)但是输出是: W.A.Wan Dollah
我想要前两个单词,剩下的更短一些。请帮帮忙。
问题解决了,多亏了Casimir et Hippolyte。最后的准则是:
preg_replace('~^(?:\s*\S+){1,2}(*SKIP)(*FAIL)|(\S)\S+~', '${1}.', strtoupper($_GET['fullname']))这是模式的问题。
发布于 2014-05-22 15:34:47
您可以使用回溯控制谓词(*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)强制模式失败。
https://stackoverflow.com/questions/23811183
复制相似问题