Php 替换多个不重叠的字符串
我有一个PHP应用程序,我必须用它们各自的链接替换一大堆字符串。基本上,我得到了一个可能的替代品列表,看起来是这样的:Php 替换多个不重叠的字符串,php,regex,str-replace,Php,Regex,Str Replace,我有一个PHP应用程序,我必须用它们各自的链接替换一大堆字符串。基本上,我得到了一个可能的替代品列表,看起来是这样的: "Table 1" => "<a href='SOME_LINK'>Table 1</a>" "Table 2" => "<a href='SOME_LINK'>Table 2</a>" ... "Table 10" => "<a href='SOME_LINK'>Table 10</a>
"Table 1" => "<a href='SOME_LINK'>Table 1</a>"
"Table 2" => "<a href='SOME_LINK'>Table 2</a>"
...
"Table 10" => "<a href='SOME_LINK'>Table 10</a>"
"Table 11" => "<a href='SOME_LINK'>Table 11</a>"
输入:
We have some text here.
It has words like Table 1, Table 2 and also Table 10.
Those need to be replaced.
输出:
We have some text here.
It has words like <a href='SOME_LINK'>Table 1</a>, Table 2 and also <a href='SOME_LINK'>Table 10</a>.
Those need to be replaced.
我们这里有一些文本。
它有如,表2和。
这些需要更换。
由于包含更多信息的注释,再次修改答案
例如,您可以使用正则表达式搜索表,如PHP代码:
$input = "We have some text here.
It haswords like Table 1, Table 2 and also Table 10.
Those need to be replaced.";
$output = preg_replace("/(Table 1)(?![\d])/U", "<a href=\"LINK HERE\">LINK TEXT</a>", $input);
echo "Input:<br>".$input."<br><br>Output:<br>".$output;
$input=“我们这里有一些文本。
它有表1、表2和表10这样的词。
这些需要更换。”;
$output=preg_replace(“/(表1)(?![\d])/U“,”,$input);
回显“输入:
”$Input.
输出:
”$Output;
PHP处理某些正则表达式选项的方式似乎与我个人预期的不同。这段代码在一个测试服务器中为我工作(将“表1”替换为2或10,只替换了正确的部分)。如果需要不区分大小写的搜索,请在正则表达式中的U旁边添加i。再次修改答案,因为注释包含更多信息 例如,您可以使用正则表达式搜索表,如PHP代码:
$input = "We have some text here.
It haswords like Table 1, Table 2 and also Table 10.
Those need to be replaced.";
$output = preg_replace("/(Table 1)(?![\d])/U", "<a href=\"LINK HERE\">LINK TEXT</a>", $input);
echo "Input:<br>".$input."<br><br>Output:<br>".$output;
$input=“我们这里有一些文本。
它有表1、表2和表10这样的词。
这些需要更换。”;
$output=preg_replace(“/(表1)(?![\d])/U“,”,$input);
回显“输入:
”$Input.
输出:
”$Output;
PHP处理某些正则表达式选项的方式似乎与我个人预期的不同。这段代码在一个测试服务器中为我工作(将“表1”替换为2或10,只替换了正确的部分)。如果需要不区分大小写的搜索,请在正则表达式的U旁边添加i。作为一种解决方法,如何按键长降序对数组进行排序,并使用正则表达式仅替换未由
封装的字符串,
“表2=>”,
“表10”=>”,
];
uksort($replacements,function($a,$b){
返回strlen($b)-strlen($a);
});
foreach($替换为$key=>$value){
$input=preg_replace('/([^>])'.$key'/','$1'.$value,$input);
}
//显示结果
打印($输入);
本例要求在替换键之前留一个空格。如果该用例不允许这样做,则可以对其进行修改。我已将示例更新为对搜索键之前的字符不可知。作为一种解决方法,如何按键长降序对数组进行替换排序,并使用正则表达式仅替换未由
封装的字符串,
“表2=>”,
“表10”=>”,
];
uksort($replacements,function($a,$b){
返回strlen($b)-strlen($a);
});
foreach($替换为$key=>$value){
$input=preg_replace('/([^>])'.$key'/','$1'.$value,$input);
}
//显示结果
打印($输入);
此示例要求在更换钥匙前留有空格。如果对用例来说这是禁止的,那么应该可以修改它。我已将示例更新为对搜索键之前的字符不可知。请做一件事,用您的输入和预期结果更新您的帖子,这可能会有所帮助。@WiktorStribiż这是一个非常好的主意。我正在考虑对项目进行排序,但是添加的
|
是我缺少的部分。如果那篇文章回答了你的问题,让我们将这篇文章作为一篇重复文章来结束,好吗?很高兴,但请让我先试试,看看我是否能让它工作。完成后我会立即报告:)请做一件事,用您的输入和预期结果更新您的帖子。请看,这可能会有所帮助。@WiktorStribiż这是一个非常好的主意。我正在考虑对项目进行排序,但是添加的|
是我缺少的部分。如果那篇文章回答了你的问题,让我们将这篇文章作为一篇重复文章来结束,好吗?很高兴,但请让我先试试,看看我是否能让它工作。我一做完就报告:)这只是一个例子来说明这个问题。我无法控制输入文本,这取决于用户将使用哪种字符串。我只是得到了列表和期望的结果,其余的都失去了控制。你的第二个解决方案似乎不起作用,它做了一大堆奇怪的替换,甚至没有击中靶心。这只是一个例子来说明这个问题。我无法控制输入文本,这取决于用户将使用哪种字符串。我只是得到了清单和期望的结果,其余的都失去了控制。你的第二个解决方案似乎不起作用,它做了一大堆奇怪的替换,甚至没有击中靶心。你能提供你的想法的例子吗?你能提供你的想法的例子吗?
$input = "We have some text here.
It has words like Table 1, Table 2 and also Table 10.
Those need to be replaced.";
$replacements = [
"Table 1" => "<a href='SOME_LINK'>Table 1</a>",
"Table 2" => "<a href='SOME_LINK'>Table 2</a>",
"Table 10" => "<a href='SOME_LINK'>Table 10</a>",
];
uksort($replacements, function($a, $b) {
return strlen($b) - strlen($a);
});
foreach ( $replacements as $key => $value ) {
$input = preg_replace('/([^>])'.$key.'/', '$1'.$value, $input);
}
// Show the result
print($input);