我的搜索栏接受任何字符串,并用空格将其拆分以标记化搜索词。示例:Please look for this
被分成4个搜索词。但是,反引号`like this`
内的所有空白都将保留并视为单个搜索词,例如:Some `preserved space here` to search for
被分成
我最近介绍了我所说的文本命令,它们只是遵循约定的--cost:more:3
之类的特殊搜索词
--COMMAND:OPERATOR:VALUE
我知道它们在图形上有点类似于CLI选项。请注意,OPERATOR
和VALUE
是可选的,例如:
--cost:5
有效,表示“成本等于5”,默认为“等于”运算符--noname
只是一个“标志”文本命令,不需要运算符或值我目前在PHP中使用大量代码进行的操作是:
explode()
通过空格将整个字符串提取为搜索项--
开头,则是文本命令:explode()
用:
进行搜索,以检查其是否具有可选的运算符或值有没有办法用一个巨大的正则表达式来做到这一点?我天真地认为,也许两个正则表达式就足够了:一个用于保留反斜线内部的空白,另一个用于获取文本命令和搜索词并可能区分它们。
我用来替换反引号中的空白
$query = "Some `preserved space here` to search for"; // Comes from user
$unguessable = "123abc"; // The "unguessable" string
$pattern = "/\s+(?=(?:(?:[^`]*`){2})*[^`]*`[^`]*$/i";
$query = preg_replace($pattern, $unguessable, $query);
除了有条件的环顾之外,我对下一部分没有扎实的想法!您认为使用正则表达式值得尝试吗?谢谢。