正则表达式关键词过滤
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|$)
试试这个代码
我正在尝试使用正则表达式构建搜索,该正则表达式使用特定术语来拆分和过滤搜索查询。例如,如果我有这样的查询:
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|$)
试试这个代码