PHP正则表达式模式匹配魔术搜索关键字

时间:2012-01-11 22:28:11

标签: php regex parsing preg-match

好的正则表达专家。我在为我的需求制作正则表达式模式时遇到了很多麻烦。 目标: 进行搜索查询,例如“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);

我的图像我需要将返回的$ match命名为对吗? 谢谢,

1 个答案:

答案 0 :(得分:3)

我认为你不想使用正则表达式。当您添加更多运算符(如type:和format)时,维护和更新会很麻烦:此外,正则表达式还取决于所输入内容的顺序。

一种简单的方法可能就像

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

该示例的明显警告是直接在太空爆炸,因此您将无法处理应被视为一个的“引用术语”。