正则表达式关键词过滤

Regular expression keyword filtering

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

我有一个匹配关键字 (artist/track) 和关键字后的第一个词 (rolling/stupid/paint) 的基本正则表达式,但是如果我让它匹配空格和后面的词,它只匹配整个字符串。

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

use strict;
use warnings;
$string =~ s{artist\s*((?:(?!track|$).)+)track\s*((?:(?!track|$).)+)(?:track((?:(?!track|$).)+))?}{artists : [''], tracks : ['','']}ig;

试试这个代码。

使用这个正则表达式

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

替换:

artists : [''], tracks : ['','']
(artist|track).*?(?=artist|track|$)

试试这个代码