文字格式:
(Superships)
Eirik Raude - olajkutató fúrósziget
(Eirik Raude - Oil Patch Explorer)
我需要正则表达式来匹配第二组括号之间的文本。结果:text3。
我需要perl脚本的正则表达式来匹配这个标题和副标题。示例脚本:
($anchor) = $tree->look_down(_tag=>"h1", class=>"blackbigtitle");
if ($anchor) {
$elem = $anchor;
my ($engtitle, $engsubtitle, $hunsubtitle @tmp);
while (($elem = $elem->right()) &&
((ref $elem) && ($elem->tag() ne "table"))) {
@tmp = get_all_text($elem);
push @lines, @tmp;
$line = join(' ', @tmp);
if (($engtitle) = $line =~ m/**regex need that return text1**/) {
push @{$prog->{q(title)}}, [$engtitle, 'en'];
t "english-title added: $engtitle";
}
elsif (($engsubtitle) = $line =~ m/**regex need that return text3**/) {
push @{$prog->{q(sub-title)}}, [$subtitle, 'en'];
t "english_subtitle added: $engsubtitle";
}
elsif (($hunsubtitle) = $line =~ m/**regex need that return text2**/) {
push @{$prog->{q(hun-subtitle)}}, [$hunsubtitle, 'hu'];
t "hungarinan_subtitle added: $hunsubtitle";
}
}
}
答案 0 :(得分:0)
考虑到您的评论,您可以执行以下操作:
if (($english_title) = $line =~ m/^\(([^)]+)\)$/) {
$found_english_title = 1;
# do stuff
} elsif (($english-subtitle) = $line =~ m/^([^()]+)$/) {
# do stuff
} elsif ($found_english_title && ($hungarian-title) = $line =~ m/^\(([^)]+)\)$/) {
# do stuff
}
答案 1 :(得分:-1)
如果您需要在一个表达式中匹配它们:
\(([^)]+)\)([^(]+)\(([^)]+)\)
这匹配(,然后是任何不是),然后),然后任何不是(,然后,(,......我认为你得到了图片。
第一组将是text1,第二组将是text2,第三组将是text3。
当你多次应用时,你也可以创建一个更像generix的正则表达式,例如“(text1)”,“(text1)text2(text3)”或“text1(text2)”:
(?:^|[()])([^()])(?:[()]|$)
这匹配字符串或(或)的开头,然后匹配不是(或),然后(或)或字符串结尾的字符。 :?用于非捕获组,因此第一组将具有该字符串。每次匹配(和)都需要更复杂的东西,即它可以匹配“(text1(”。