好的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
}
这个例子的明显警告是直接在空间上爆炸,所以你将无法处理应该被视为一个术语的"引用术语"。