【发布时间】:2011-07-09 03:50:52
【问题描述】:
我正在使用以下 perl 正则表达式行
$myalbum =~ s/[-_'&’]/ /g;
$myalbum =~ s/[,’.]//g;
$myalbum =~ m/([A-Z0-9\$]+) +([A-Z0-9\$]+) +([A-Z0-9\$]+) +([A-Z0-9\$]+) +([A-Z0-9\$]+)/i;
匹配以下字符串
"30_Seconds_To_Mars_-_30_Seconds_To_Mars"
"30_Seconds_To_Mars_-_A_Beautiful_Lie"
"311_-_311"
"311_-_From_Chaos"
"311_-_Grassroots"
"311_-_Sound_System"
我遇到的是,对于少于 5 个匹配组的字符串(例如 311_-_311),尝试 print $1 $2 $3 根本不会打印任何内容。只有超过 5 个匹配的字符串才会打印。
我该如何解决这个问题?
【问题讨论】:
-
我没有将您列表中的单个字符串与该正则表达式匹配。你已经用下划线把你的字符串牢固地粘在一起了,但是你希望通过你的表达式有空格。只需
(\w+)-(\w+)就可以根据我在其中看到的内容起作用。 -
对不起,我省略了一些额外的正则表达式行
-
给我们更多关于你更大意图的背景信息。您似乎想要来自
"$artist $title"的前五个字,但如果他们都有很多字怎么办?当渲染为"Pink Floyd Several Species of"时,“几种毛茸茸的小动物聚集在一个洞穴中并用一个 Pict 开槽”似乎失去了它的一些特色。