Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用regexp从括号组和括号组之间查找结果_Regex - Fatal编程技术网

使用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
  • 我需要正则表达式来匹配第一组括号和第二组括号之间的文本。结果:text2
  • 我需要正则表达式来匹配第二组括号中的文本。结果:text3

    • text1:超级飞船,代表英文标题
    • 文本2:Eirik Raude-olajkutatófúrósziget,代表匈牙利副标题
    • text3:Eirik Raude-油斑探测器,代表英文字幕
  • 我需要regex for 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"; 
            } 
        } 
    }
    

    如果需要在一个表达式中匹配它们:

    \(([^)]+)\)([^(]+)\(([^)]+)\)
    
    这个匹配(,然后是任何不匹配的),然后),然后是任何不匹配的(,然后,(,…我想你明白了

    第一组为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:\\\\\