我正在尝试以布尔模式执行 mysql 全文搜索,并且需要在构建 mysql 查询之前准备搜索文本。
为了实现这一目标,我认为我可以使用 PHP 函数preg_replace并用一种特定模式替换每个捕获组。
"hello world") 之间的单词或句子并在前面添加+( +"hello world")。+前后*( +how*)。正则表达式模式
["']+([^"']+)["']+|([^\s"']+)
Run Code Online (Sandbox Code Playgroud)
替代模式
+"\1" +\2*
Run Code Online (Sandbox Code Playgroud)
例子
对于以下输入:
"hello world" how are you?
Run Code Online (Sandbox Code Playgroud)
它应该返回:
+"hello world" +how* +are* +you?*
Run Code Online (Sandbox Code Playgroud)
但相反,它返回一些“错误”的东西:
+"hello world" +* +"" +how* +"" +are* +"" +you?*
Run Code Online (Sandbox Code Playgroud)
我知道替换模式+"\1" +\2*永远不会起作用,因为我没有告诉任何地方+"..."应该只适用于第一个捕获组和+...*第二个捕获组。
PHP代码
$query = preg_replace('~["\']+([^"\']+)["\']+|([^\s"\']+)~', '+"\1" +\2*', $query);
Run Code Online (Sandbox Code Playgroud)
有没有办法在 PHP 中实现这一点?先感谢您。
编辑/解决方案
感谢 …