我有许多字符串都以@和a伪开头,我想将这些伪通过正则表达式更改为真实姓名。 我没有很多伪(可能是5到10)所以我可以使用简单的正则表达式:
$find = array('@alex', '@donald');
$replace = array('Alex A.', 'Donald B.' );
$result= preg_replace($find, $replace, $feed->itemTitle);
我的问题是我已经在这些字符串上有一个pre_replace,它会删除链接。到目前为止,这是我的正则表达式:
<?php echo preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?).....@',' ',$feed->itemTitle); ?>
我无法想出一个可以混合两个正则表达式的解决方案。 (正则表达式是我无法容忍的事情)。
答案 0 :(得分:2)
如果链接已经preg_replace
不是问题,请不要为此烦恼。
如果您希望可以构建一个包含捕获组的巨型模式,以便与preg_replace_callback
一起使用,允许回调函数根据捕获组编号选择要返回的替换字符串。但是,这不是好方法。
因为,您想要替换固定字符串(@alex
,@donald
是固定字符串)最好也是最快的方法是使用strtr
(即使你第二次解析字符串):
$trans = array('@alex' => 'Alex A.',
'@donald' => 'Donald B.');
$result = strtr($feed->itemTitle, $trans);