好的正则表达专家。我在为我的需求制作正则表达式模式时遇到了很多麻烦。 目标: 进行搜索查询,例如“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命名为对吗? 谢谢,
答案 0 :(得分:3)
我认为你不想使用正则表达式。当您添加更多运算符(如type:和format)时,维护和更新会很麻烦:此外,正则表达式还取决于所输入内容的顺序。
一种简单的方法可能就像
$tokens=explode(" ",$searchString);
foreach($tokens as $token){
if(preg_match('~([^:]+:(.*)~',$token,$flagMatch)){
$flags[$flagMatch[1]]=$flagMatch[2];
}
$searchtokens[]=$token
}
该示例的明显警告是直接在太空爆炸,因此您将无法处理应被视为一个的“引用术语”。