preg_replace_callback 的单引号问题
single quote problem with preg_replace_callback
我进行了广泛的搜索,但没有找到针对我的问题的提示或解决方案。
问题是我无法用单引号匹配单词。这可能是由服务器、php 或 mysql 设置引起的。
我想知道我是否可以解决这个问题。
我这里有一个活生生的例子:Fiddle with 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's 测试
- 测试自动测试
当我在我的站点上实施此代码时,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;
?>
提示。提示。所以在类似的情况下,检查一个字符是如何存储在你的数据库中的,并在你的正则表达式中使用它。
我进行了广泛的搜索,但没有找到针对我的问题的提示或解决方案。 问题是我无法用单引号匹配单词。这可能是由服务器、php 或 mysql 设置引起的。 我想知道我是否可以解决这个问题。
我这里有一个活生生的例子:Fiddle with 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's 测试
- 测试自动测试
当我在我的站点上实施此代码时,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;
?>
提示。提示。所以在类似的情况下,检查一个字符是如何存储在你的数据库中的,并在你的正则表达式中使用它。