我正在尝试匹配Perl中看起来像这样的字符串
%TRMMHDT128F422F115<SEP>SOJEZBM12A6D4FEA96<SEP>Thursday<SEP>A Hole In The World (Album Version) [etc]
字符串的末尾并不总是括号和/或括号。我想要做的是删除歌曲周围的所有绒毛,并最终删除歌曲中的所有标点符号。我现在可以用这些陈述两次通过:
$line =~ s/.*>//;
$line =~ s/(\(.*)|(\[.*)//;
我想一次性完成所有操作,但是如果我在第一个表达式之后添加管道|
,那么在第二个表达式之前它将不会删除括号或括号中的任何内容。像这样:
$line =~ s/.*>|(\(.*)|(\[.*)//;
现在在一个正则表达式测试器中,这匹配了我想要匹配的所有内容,但它并不能代替所有内容。
答案 0 :(得分:1)
在Perl中替换多个子字符串:
$line =~ s/.*>|(\(.*)|(\[.*)//g;
在Perl正则表达式中,g
修饰符会不断应用RegEx,直到它停止匹配为止。
虽然最后两个条件几乎相同,但我可能会把它合并到:
$line =~ s/.*>|([([].*)//g;
答案 1 :(得分:0)
试试这个:
$line =~ s/(.*>)(.*)(\(.*)/$2/;
这样做是因为它匹配该模式的整行,并用$ 2替换整行,这是歌曲标题。