使用regexp从括号组和括号组之间查找结果
文本格式:使用regexp从括号组和括号组之间查找结果,regex,Regex,文本格式: (Superships) Eirik Raude - olajkutató fúrósziget (Eirik Raude - Oil Patch Explorer) 我需要正则表达式来匹配第一组括号中的文本。结果:text1 我需要正则表达式来匹配第一组括号和第二组括号之间的文本。结果:text2 我需要正则表达式来匹配第二组括号中的文本。结果:text3 text1:超级飞船,代表英文标题 文本2:Eirik Raude-olajkutatófúrósziget,代表
(Superships)
Eirik Raude - olajkutató fúrósziget
(Eirik Raude - Oil Patch Explorer)
- text1:超级飞船,代表英文标题
- 文本2:Eirik Raude-olajkutatófúrósziget,代表匈牙利副标题
- text3:Eirik Raude-油斑探测器,代表英文字幕李>
($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";
}
}
}
如果需要在一个表达式中匹配它们:
\(([^)]+)\)([^(]+)\(([^)]+)\)
这个匹配(,然后是任何不匹配的),然后),然后是任何不匹配的(,然后,(,…我想你明白了
第一组为text1,第二组为text2,第三组为text3
您还可以创建一个更为通用的正则表达式,在多次应用时,该正则表达式与“(text1)”、“(text1)text2(text3)”或“text1(text2)”等内容相匹配:
(?:^|[()])([^()])(?:[()]|$)
这将匹配字符串的开头或(或),然后是非(或)的字符,然后是(或)或字符串的结尾。:?用于非捕获组,因此第一个组将具有字符串。每次都需要更复杂的匹配,即它可以匹配“(text1(”.考虑到您的评论,您可以执行以下操作:
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,如果行不包含括号,我需要一个正则表达式来匹配文本2,如果行包含括号,我需要一个正则表达式来匹配文本3第二组圆括号(在这一行之前还有另一行包含圆括号,)。我们不是来为您工作的。到目前为止您自己做了什么?-1,这在正则表达式中有错误,必须未经测试。不匹配(在正则表达式中,用“否”标记,我需要正则表达式从行中分别匹配每个文本。@Moritz是的,它未经测试,但您没有正确复制它,它应该是m/([^)]+([^(+)([^)]+)/,您缺少了第一个反斜杠。嗯,我看到有东西在注释部分占用了额外的反斜杠……对……您的正则表达式缺少一个“)'我想在第8个字符(这个加号)后面。--注释部分:一个反斜杠:\2个反斜杠:\\3:\\\4:\\\5:\\\\\