我已经广泛搜索了,但我没有找到针对我问题的提示或解决方案。 问题是我无法将单词与单引号匹配。也许这是由服务器,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?
?>
结果:
测试- 自动测试测试 测试
- 自动的测试 测试
- 自动测试
当我在我的网站上实现此代码时,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 __^^^
终于找到了解决方案。 单引号作为'
存储在数据库中 用~( auto(?:'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(?:'s)? )~si", function ($match)
{ return ' <a href="https://example.com">'.$match[1].'</a> '; }, $message, 1);
echo $message;
?>
提示。提示。因此,在类似的情况下,请检查字符在数据库中的存储方式,并在正则表达式中使用它。