如何通过正则表达式或有效的替代方法提取单词/引用句子?:
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
摘录aussie guy用于标签:和Australia用于国家:。
目的是将其合并到搜索输入框中,以便用户可以有效地对搜索条件应用过滤器。
请让我知道我该怎么做,谢谢!
要匹配所有name:value
或name:"value"
,您可以在preg_match_all
函数调用中使用条件子模式regex:
(w+):"?K((?(?<=")[^"]*|w*))
RegEx演示
所有name
将在捕获组#1中可用,value
部分将在捕获组#2中可用。
RegEx分手
(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代码演示
只匹配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+