regex like gmail search operators - PHP preg_match

雨燕双飞 提交于 2019-12-04 20:15:52

You can use something like this:

<?php
$input = 'command1:word1 word2 command2:word3 command3:word4 wordN command1:word3';
preg_match_all('/
  (?:
    ([^: ]+) # command
    : # trailing ":"
  )
  (
    [^: ]+  # 1st word
    (?:\s+[^: ]+\b(?!:))* # possible other words, starts with spaces, does not end with ":"
  )
  /x', $input, $matches, PREG_SET_ORDER);

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

var_dump($result);

It will cope even with same commands at different locations (eg. "command1:" at both the start and end).

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!