Как извлечь слово / цитируемое предложение через регулярное выражение или эффективную альтернативу как таковую ?:
tag:videos
будет извлекать видео
tag:"my videos"
будет извлекать мои видео
riding ponies tag:ponies
будет извлекать пони
riding ponies tag:"pony rider"
будет извлекать наездник на пони
riding ponies tag:
ничего не извлечет
Возможность поддержки нескольких тегов также была бы великолепна, например:
travelling the world tag:"aussie guy" country:Australia
экстракты австралийский парень за тег: а также Австралия за страна:.
Намерение состоит в том, чтобы включить это в поле ввода поиска, чтобы пользователи могли эффективно применять фильтры со своими поисковыми терминами.
Пожалуйста, дайте мне знать, как я могу это сделать, спасибо!
Чтобы соответствовать всем name:value
или же name:"value"
Вы можете использовать это условное регулярное выражение в preg_match_all
вызов функции:
(\w+):"?\K((?(?<=")[^"]*|\w*))
Все name
будут доступны в захваченной группе № 1 и value
часть будет в захваченной группе № 2.
RegEx Breakup
(\w+) # match 1 or more word characters in a group
: # match literal colon
"? # match a double quote optionally
\K # reset the matched data so fat
((?...)) # conditional sub-pattern available in 2nd captured group
?(?<=") # condition is using look-behind if previous character is "[^"]* # TRUE: match 0 or more characters that are not "| # or if condition fails
\w* # FALSE: match 0 or more word characters
Чтобы соответствовать только tag
И его value
используйте это регулярное выражение:
\btag:"?\K((?(?<=")[^"]*|\w*))
Я думаю, что это сделает то, что вы после:
/tag:('|")?(.+?)(\1|$)/m
Демо-версия: https://regex101.com/r/hN2gO2/1
Использование PHP:
preg_match_all('/tag:(\'|")?(.+?)(\1|$)/m', 'tag:videos
tag:"my videos"riding ponies tag:ponies
riding ponies tag:"pony rider"riding ponies tag:
travelling the world tag:"aussie guy" country:Australia', $match);
print_r($match[2]);
Выход:
Array
(
[0] => videos
[1] => my videos
[2] => ponies
[3] => pony rider
[4] => aussie guy
)
Если tag
взаимозаменяемо с любым словом сделать это \w+
,