当您有重复的子字符串时如何正确替换字符串?
Posted
技术标签:
【中文标题】当您有重复的子字符串时如何正确替换字符串?【英文标题】:How to properly replace strings when you have repeated substrings? 【发布时间】:2020-01-29 15:11:57 【问题描述】:我想在文本中添加指向 url 的超链接,但问题是我可以有不同的格式,并且 url 可能有一些子字符串在其他字符串中重复。让我用一个例子更好地解释它:
Here I have one insidelinkhttp://google.com But I can have more formats like the followings: https://google.com google.com
现在我从上面的示例中提取了以下链接:["http://google.com", "https://google.com", "google.com"]
,我想用以下数组替换这些匹配项:['<a href="http://google.com">http://google.com</a>', '<a href="https://google.com">https://google.com</a>', '<a href="google.com">google.com</a>']
如果我在替换每个元素的数组上进行迭代,一旦我正确添加了"http://google.com"
的超链接,就会出现如上例中的错误,每个子字符串都将替换为来自"google.com"
的另一个超链接
有人知道如何解决这个问题吗?
谢谢
【问题讨论】:
你试过preg_replace或preg_replace_callback吗? 【参考方案1】:根据您的示例字符串,我定义了 3 种不同的 URL 匹配模式,并根据您的要求替换它,您可以在“$regEX”变量中定义更多模式。
// string
$str = "Here I have one insidelinkhttp://google.com But I can have more formats like the followings: https://google.com google.com";
/**
* Replace with the match pattern
*/
function urls_matches($url1)
if (isset($url1[0]))
return '<a href="' . $url1[0] . '">' . $url1[0] . '</a>';
// regular expression for multiple patterns
$regEX = "/(http:\/\/[a-zA-Z0-9]+\.+[A-Za-z]2,6+)|(https:\/\/[a-zA-Z0-9]+\.+[A-Za-z]2,6+)|([a-zA-Z0-9]+\.+[A-Za-z]2,6+)/";
// replacing string based on defined patterns
$replacedString = preg_replace_callback(
$regEX,
"urls_matches",
$str
);
// print the replaced string
echo $replacedString;
【讨论】:
非常感谢!效果很好,非常感谢您的帮助:)【参考方案2】:您可以进行搜索并将它们替换为模板字符串。 例如:STRINGA、STRINGB、STRINGC
然后循环遍历第 0 项替换 STRINGA 的数组。 只需确保模板名称没有重叠的名称,例如 STRING1 和 STRING10
【讨论】:
以上是关于当您有重复的子字符串时如何正确替换字符串?的主要内容,如果未能解决你的问题,请参考以下文章