PHP RegEx标记化搜索词(空格)

时间:2018-07-27 00:20:40

标签: php regex whitespace

我的搜索栏接受任何字符串,并用空格将其拆分以标记化搜索词。示例:Please look for this被分成4个搜索词。但是,反引号`like this`内的所有空白都将保留并视为单个搜索词,例如:Some `preserved space here` to search for被分成

  • 有些
  • 在此处保留空间
  • 搜索

我最近介绍了我所说的文本命令,它们只是遵循约定的--cost:more:3之类的特殊搜索词

--COMMAND:OPERATOR:VALUE

我知道它们在图形上有点类似于CLI选项。请注意,OPERATORVALUE是可选的,例如:

  • --cost:5有效,表示“成本等于5”,默认为“等于”运算符
  • --noname只是一个“标志”文本命令,不需要运算符或值

我目前在PHP中使用大量代码进行的操作是:

  1. 如果存在反勾号,请将其内部的所有空格更改为随机的“无法使用”字符串(基于UNIX时间戳记)
  2. explode()通过空格将整个字符串提取为搜索项
  3. 在所有搜索字词上加圈:
    1. 如果出现反斜线并且有随机字符串,请将其改回空白
    2. 如果搜索词以--开头,则是文本命令:explode():进行搜索,以检查其是否具有可选的运算符或值
    3. 否则,它们是基本的搜索字词

有没有办法用一个巨大的正则表达式来做到这一点?我天真地认为,也许两个正则表达式就足够了:一个用于保留反斜线内部的空白,另一个用于获取文本命令和搜索词并可能区分它们。

我用来替换反引号中的空白

$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);

除了有条件的环顾之外,我对下一部分没有扎实的想法!您认为使用正则表达式值得尝试吗?谢谢。

0 个答案:

没有答案