我有一个用户可设置的文本,其中默认的是[Log in] or [register] to view the content
。
我需要的是把这两个词用方括号括在它们各自的链接中。但首先,我需要检查用户是否没有更改这个默认文本,换句话说,他们是否保留了方括号。我不会花太多时间去检查这个。只要存在两组方括号就足够了。如果是这样的话,那么我假设第一个链接是登录页面,第二个是注册帐户页面...
所以,下面的if为我做了这项工作:
if ( preg_match( '/\[(.*?)\].*\[(.*?)\]/', $text ) )
然后,在if中,我的计划是用两个数组执行str_replace()
,如下所示:
$text = str_replace( array( '[', ']', '[', ']' ), array( '%1$s', '%2$s', '%3$s', '%4$s' ), $text );
但这和我想的不一样。我认为,由于两个数组的元素数量相等,它会进行1对1的搜索和替换,这意味着它会将文本转换为%1$sLog in%2$s or %3$sregister%4$s to view the content
,而它会将文本转换为%1$sLog in%2$s or %1$sregister%2$s to view the content
。
为什么会这样?如果这不是正确的方法(显然不是),我应该怎么做?
任何帮助将非常感谢。TIA。
1条答案
按热度按时间mi7gmzs61#
尝试使用相同模式的
preg_replace
(带有额外捕获):它产生
str_replace并没有按照你想要的方式工作--第一个数组是一个没有位置感的针数组,所以第二组
[]
在你的例子中是重复的针。参见测试仪