我在使用正则表达式时遇到问题, 例如:我有这样的事情:
Wynk (* it is a Music online music player ; We can listen a song online and offline *) PAID;
youtube (* it is video player ; we can see the video online and we can download it *) free;
在上面提到的示例中,我需要删除(*
和*)
- 分隔的注释并提取数据" Wynk"和"付费"从第一行和" youtube"并且"免费"从第二个开始。
我做过类似的事情
($first_word) =$_ =~ /^\s*(\w+)/; ($last_word) = $_ =~ /(\w+)\s*\;$/;
但是我无法获得与上述示例类似的所有数据的完美结果。
答案 0 :(得分:0)
您不需要两个正则表达式。
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
while (<DATA>) {
# skip empty lines
next unless /\S/;
my ($first, $last) = /\b(\w+)\b.*\b(\w+)\b\s*;/;
say "$first / $last";
}
__DATA__
Wynk (* it is a Music online music player ; We can listen a song online and offline *) PAID;
youtube (* it is video player ; we can see the video online and we can download it *) free;
输出:
Wynk / PAID
youtube / free
但我认为这与你已经拥有的并没有太大的不同。所以我怀疑你可能需要向我们提供更多有关“完美结果”的详细信息。
答案 1 :(得分:0)
while (<>) {
chomp;
s/;\s*\z//;
my ($id, $status) = /^ (.*) \(\* .* \)\* (.*)/sx
or die;
s/^\s+//, s/\s+\z// for $id, $status;
...
}
此解决方案适用于Yahoo!
和Joe's Streaming Service
等ID。