Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 替换多个不重叠的字符串_Php_Regex_Str Replace - Fatal编程技术网

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>

我有一个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 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);