我在使用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);
答案 0 :(得分:1)
/(\w+)?(\w+)/g
Test此模式
<?php
echo preg_replace("/(\w+)?(\w+)/i", "thi?s", "?");
?>
?
希望这对你有帮助!
答案 1 :(得分:1)
我建议这个用于PHP:
(?<!\w(?=\? ))\?(?!\s*$)\s*
(?!\s*$)
是一个负面预测,如果它位于句子的末尾,则会阻止?
匹配(我添加了空格以防万一)。
(?<!\w(?=\? ))
稍微复杂一些。如果?
前面有\w
个字符(通常显示为[a-zA-Z0-9_]
)并且后跟空格,则会阻止匹配。
我不知道mysql是否支持lookbehinds。
|([^?]+)\
这是您当前的正则表达式,我认为您的PHP代码不会运行。最后的\
并没有逃避任何事情(事实上,它试图逃避分隔符)所以...:s