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

Php 正则表达式:替换两个字符之间的字符,php,mysql,regex,Php,Mysql,Regex,我在使用正则表达式替换两个字符之间有?的字符串时遇到问题。我希望正则表达式匹配的两个示例是: • Replace thi?s question mark but not this one? • ? Replace the lonely question mark 最好的方法是什么: a) 匹配由其他字符包围的字符 b) 匹配一个单独的字符,并且前后都没有字符 我使用PHP preg_match和MySQL REGEXP来实现这些模式匹配。对于MySQL,我尝试过: SELECT descrip

我在使用正则表达式替换两个字符之间有
的字符串时遇到问题。我希望正则表达式匹配的两个示例是:

• 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 '/|([^?]+)\/'
preg_match('/|([^?]+)\/', $string);
对于PHP,我尝试过:

SELECT description
FROM locations
WHERE description
REGEXP '/|([^?]+)\/'
preg_match('/|([^?]+)\/', $string);
选中此项 图案 这种模式


PHP
希望这对你有帮助

我建议PHP使用此选项:

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

这是您当前的正则表达式,我认为您的PHP代码无法运行。结尾的
\
没有转义任何内容(事实上,它试图转义分隔符),所以…:那么你遇到了什么问题?啊!很好的化身。里面有什么?@devnull我尝试的每种模式都不会产生我想要的结果。@Enijar你能提到一些你尝试过的模式吗?谢谢,这正是我想要的!谢谢你的改进,不客气!顺便说一下,我不认为另一个答案是正确的,因为,但那只是我。如果它真的适合你,请为不理解你的要求而道歉。你是对的。另一个答案对我的问题只正确了一半。我已经更新了我的答案选择。再次感谢您。@Enijar很高兴能帮助您:)
(?<!\w(?=\? ))\?(?!\s*$)\s*
|([^?]+)\