正则表达式:替换两个字符之间的字符

时间:2014-04-05 18:03:26

标签: php mysql regex

我在使用Regex替换两个字符之间?的字符串时遇到问题。我希望Regex匹配的两个例子是:

• Replace thi?s question mark but not this one?
• ? Replace the lonely question mark

最好的方法是:

a)匹配由其他角色包围的角色

b)匹配一个自己的角色,在它之前或之后没有任何角色

我正在使用PHP preg_match和MySQL REGEXP来预先形成这些模式匹配。对于MySQL,我尝试过:

SELECT description
FROM locations
WHERE description
REGEXP '/|([^?]+)\/'

对于PHP,我尝试过:

preg_match('/|([^?]+)\/', $string);

2 个答案:

答案 0 :(得分:1)

检查此 Demo Code Viper

模式

/(\w+)?(\w+)/g

Test此模式


PHP

<?php
    echo preg_replace("/(\w+)?(\w+)/i", "thi?s", "?");
?>

结果

?

希望这对你有帮助!

答案 1 :(得分:1)

我建议这个用于PHP:

(?<!\w(?=\? ))\?(?!\s*$)\s*

(?!\s*$)是一个负面预测,如果它位于句子的末尾,则会阻止?匹配(我添加了空格以防万一)。

(?<!\w(?=\? ))稍微复杂一些。如果?前面有\w个字符(通常显示为[a-zA-Z0-9_])并且后跟空格,则会阻止匹配。

regex101 demo

我不知道mysql是否支持lookbehinds。


|([^?]+)\

这是您当前的正则表达式,我认为您的PHP代码不会运行。最后的\并没有逃避任何事情(事实上,它试图逃避分隔符)所以...:s