-2

我正在使用我在这个问题上找到的答案来允许我拥有搜索运算符。

它的一个问题是它要求 then 运算符和单词之间没有空格。

所以它会匹配operator:something但不是operator: something这样我想知道我如何匹配任何一种形式?

preg_match_all('/
  (?:
    ([^: ]+) # command
    : # trailing ":"
  )
  (
    [^: ]+  # 1st word
    (?:\s+[^: ]+\b(?!:))* # possible other words, starts with spaces, does not end with ":"
  )
  /x',
  $search, $matches, PREG_SET_ORDER);

  $result = array();
  foreach($matches as $match) {
      $result[$match[1]] = isset($result[$match[1]]) 
          ? $result[$match[1]] . ' ' . $match[2] 
          : $match[2];
  }
4

2 回答 2

1

第 4 行

:\ ? # trailing ":" or ": "
于 2013-08-01T20:40:40.583 回答
1
:\s*

\s 是空格的标志,* 表示 0 或更多

于 2013-08-01T20:42:35.753 回答