PHP Regex模式匹配神奇的搜索关键字


PHP Regex pattern to match magic search keywords

好的regex专家。我在尝试根据自己的需要制作regex模式时遇到了很多麻烦。目标:使用诸如"good food type:post format:gallery"之类的搜索查询,并从字符串中解析类型或格式,或者两者都解析。这是我写的,但除非类型和格式都存在,并且类型先于格式,否则不起作用。理想情况下,可以存在类型或格式。

$query = "Great food type:post format:gallery";
preg_match('/(.*?(?<='btype:)(?P<type>[a-z]*'w+))(.*?(?<='bformat:)(?P<format>[a-z]*'w+))/', $query, $matches);

我想我需要返回的$matches也被命名,对吧?谢谢,

我认为您不想为此使用正则表达式。当您添加更多的运算符(如type:和format:)时,维护和更新将是一件痛苦的事情。此外,regex还取决于输入内容的顺序。

一个简单的方法可能类似

$tokens=explode(" ",$searchString);
foreach($tokens as $token){
     if(preg_match('~([^:]+:(.*)~',$token,$flagMatch)){
         $flags[$flagMatch[1]]=$flagMatch[2];
     }
     $searchtokens[]=$token
}

这个例子的明显警告是直接在空间上爆炸,所以你将无法处理应该被视为一个术语的"引用术语"。