preg_replace_callback的单引号问题



我已经广泛搜索了,但我没有找到针对我问题的提示或解决方案。 问题是我无法将单词与单引号匹配。也许这是由服务器,php或mysql设置引起的。 我想知道我是否可以解决这个问题。

我这里有一个活生生的例子:摆弄preg_replace_callback

<?php
$message = "1. test autotest test<br >2. test auto's test<br >3.test auto test ";
$message = preg_replace_callback("~( auto(?:'s)? )~si", function ($match)
{ return ' <a href="https://example.com">'.$match[1].'</a> '; }, $message, 1);
echo $message;
// here number 2 is correctly replaced, on my site number 3. Number 2 is not working on my site. I suspect the single quote is the problem on my site. Is there a workaround?
?>

结果:

测试
  1. 自动测试测试
  2. 测试
  3. 自动的测试
  4. 测试
  5. 自动测试

当我在我的网站上实现此代码时,auto 永远不会匹配。这就是为什么我认为这是由服务器,php或mysql设置引起的。我想知道我是否可以在我的正则表达式中解决这个问题。

只需删除preg_replace末尾的1(这意味着只替换一次(:

$message = preg_replace_callback("~( auto(?:'s)? )~si", function ($match)
{ return ' <a href="https://example.com">'.$match[1].'</a> '; }, $message);
//                                                                   here __^^^

终于找到了解决方案。 单引号作为&#39;存储在数据库中 用~( auto(?:&#39;s)? )~替换~( auto(?:'s)? )~解决了我的问题。

完整的工作代码:

<?php
$message = "1. test autotest test<br >2. test auto's test<br >3.test auto test ";
$message = preg_replace_callback("~( auto(?:&#39;s)? )~si", function ($match)
{ return ' <a href="https://example.com">'.$match[1].'</a> '; }, $message, 1);
echo $message;
?>

提示。提示。因此,在类似的情况下,请检查字符在数据库中的存储方式,并在正则表达式中使用它。

相关内容

  • 没有找到相关文章

最新更新