PHP шаблон регулярных выражений для соответствия магическим ключевым словам поиска - PullRequest
0 голосов
/ 12 января 2012

Ок, эксперты по регулярным выражениям.У меня куча проблем, когда я пытаюсь создать шаблон регулярных выражений для своих нужд.Цель: взять поисковый запрос, такой как «тип хорошей еды: формат поста: галерея», и проанализировать тип или формат или оба из строки.Это то, что я написал, но это не работает, если нет ни типа, ни формата, а тип предшествует формату.В идеале должен присутствовать либо тип, либо формат.

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

Мне нужно, чтобы возвращаемые совпадения были названы, верно?Спасибо,

1 Ответ

3 голосов
/ 12 января 2012

Я не думаю, что вы захотите использовать регулярные выражения для этого. Будет трудно поддерживать и обновлять, когда вы добавите больше операторов, таких как type: и format: Кроме того, регулярное выражение зависит от порядка ввода.

Простой подход может выглядеть как

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

Очевидное предостережение в этом примере взрывается прямо в пространстве, поэтому вы не сможете обрабатывать "цитируемые термины", которые следует рассматривать как единое целое.

...