Как извлечь слово или предложение из предыдущего тега?

Как извлечь слово / цитируемое предложение через регулярное выражение или эффективную альтернативу как таковую ?:

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 экстракты австралийский парень за тег: а также Австралия за страна:.

Намерение состоит в том, чтобы включить это в поле ввода поиска, чтобы пользователи могли эффективно применять фильтры со своими поисковыми терминами.

Пожалуйста, дайте мне знать, как я могу это сделать, спасибо!

-1

Решение

Чтобы соответствовать всем name:value или же name:"value" Вы можете использовать это условное регулярное выражение в preg_match_all вызов функции:

(\w+):"?\K((?(?<=")[^"]*|\w*))

RegEx Demo

Все 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

PHP Code Demo

Чтобы соответствовать только tag И его value используйте это регулярное выражение:

\btag:"?\K((?(?<=")[^"]*|\w*))
2

Другие решения

Я думаю, что это сделает то, что вы после:

/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+,

1

По вопросам рекламы [email protected]