当你有重复的子字符串时如何正确替换字符串?
How to properly replace strings when you have repeated substrings?
我想在文本中添加到 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"
的超链接,每个子字符串将被替换为来自 [=14] 的另一个超链接,就会出现上面示例中的错误=]
有人知道如何解决这个问题吗?
谢谢
您可以搜索并用模板字符串替换它们。
例如:STRINGA、STRINGB、STRINGC
然后遍历数组,其中项目 0 替换了 STRINGA。
只需确保模板名称没有重叠名称,例如 STRING1 和 STRING10
根据您的示例字符串,我定义了 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;
我想在文本中添加到 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"
的超链接,每个子字符串将被替换为来自 [=14] 的另一个超链接,就会出现上面示例中的错误=]
有人知道如何解决这个问题吗?
谢谢
您可以搜索并用模板字符串替换它们。 例如:STRINGA、STRINGB、STRINGC
然后遍历数组,其中项目 0 替换了 STRINGA。 只需确保模板名称没有重叠名称,例如 STRING1 和 STRING10
根据您的示例字符串,我定义了 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;