0

我正在尝试使用正则表达式构建搜索,该表达式使用特定术语来拆分和过滤搜索查询。例如,如果我有这样的查询: artist rolling stones track stupid girl track paint it black,它将拉出滚石乐队的专辑,并有曲目愚蠢的女孩并将其涂成黑色。理想情况下(经过一些处理)我会像这样将数据发送到服务器{ artists : ['rolling stone'], tracks : ['stupid girl', 'paint it black'] }

我有一个基本的正则表达式,它匹配关键字(艺术家/曲目)和关键字之后的第一个单词(滚动/愚蠢/绘画),但是如果我让它匹配空格和后面的单词,它只会匹配整个字符串。

这是我目前拥有的正则表达式:(artist|track)\s([\w]+). 我猜我需要使用停用词或其他东西来创建短语之间的边界,但我对构建正则表达式并不是很有经验。任何帮助将不胜感激。

4

2 回答 2

3
(artist|track).*?(?=artist|track|$)

试试这个代码

于 2015-03-17T12:19:36.180 回答
3
use strict;
use warnings;
$string =~ s{artist\s*((?:(?!track|$).)+)track\s*((?:(?!track|$).)+)(?:track((?:(?!track|$).)+))?}{artists : ['$1'], tracks : ['$2','$3']}ig;

试试这个代码。

使用这个正则表达式

artist\s*((?:(?!track|$).)+)track\s*((?:(?!track|$).)+)(?:track((?:(?!track|$).)+))?

代替:

artists : ['$1'], tracks : ['$2','$3']
于 2015-03-17T12:12:12.083 回答