Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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
Regex 如何在Perl中重构正则表达式_Regex_Perl - Fatal编程技术网

Regex 如何在Perl中重构正则表达式

Regex 如何在Perl中重构正则表达式,regex,perl,Regex,Perl,我有以下句子: 文本GGG-33文本文本其他文本。 text text text(?:xxx | yyy)\s*\s*(?:xxx | yyy)\s*(?:| 概括: .+?\s*<MIR-\d+>\s*.+?\s*(?:<EXP-V-\d+>|<ASSC-PHRASE-\d+>)\s*.+?\s*<VACCVIRUS-PROP-\d+>.+ +?\s*\s*+?\s*(?:| 拒绝字符串: .+?\s*<MIR-\d+>\s*[^\

我有以下句子:

文本GGG-33文本文本其他文本。
text text text

(?:xxx | yyy)\s*\s*(?:xxx | yyy)\s*(?:|

概括:

.+?\s*<MIR-\d+>\s*.+?\s*(?:<EXP-V-\d+>|<ASSC-PHRASE-\d+>)\s*.+?\s*<VACCVIRUS-PROP-\d+>.+
+?\s*\s*+?\s*(?:|

拒绝字符串:

.+?\s*<MIR-\d+>\s*[^\[]+?\s*(?:<EXP-V-\d+>|<ASSC-PHRASE-\d+>)\s*[^\]]+?\s*<VACCVIRUS-PROP-\d+>.+
重构你所拥有的

@sent = ("text <MIR-1> GGG-33 <EXP-V-3> text text <VACCVIRUS-PROP-1> some other.",
         " text <MIR-1> text <ASSC-PHRASE-1> text <VACCVIRUS-PROP-1> some other <PATTERN-1> other.");

foreach $sent (@sent) {
   if ( $sent =~ /.*<MIR-\d+>.*<(?:EXP-V|ASSC-PHRASE)-\d+>.*<VACCVIRUS-PROP-\d+>.*/gi ) {
      print "$sent\n";
    }
}
@sent=(“text GGG-33 text text text some other.”,
“文本


那么,您现在是否了解
|
-
选择
-元符号?我认为它可以帮助您
(?:xxx | yyy)\s*(?:xxx | yyy)\s*(?:|)\s*(?:xxxx | yy)\s*
如何使其更一般化?因为“xxx”或“yyy”实际上可以是任何东西。哦,对不起,是的,xxx和yyy我从您的示例中选取。如果您愿意,您可以在此处放置任何内容。请提供更多示例,您想要匹配的内容。最后一件事。我如何使其拒绝以下字符串
text text[[express]ion]其他文本。
EXP-V-\d+
模式应该是唯一的,后跟空格,没有后续的
]
。请再次检查更新。不要忘记在结尾接受答案;)
(a|b|c) - choose metasymbol in work. I would choose between <a> or <b> or <c>
.+?\s*<MIR-\d+>\s*.+?\s*(?:<EXP-V-\d+>|<ASSC-PHRASE-\d+>)\s*.+?\s*<VACCVIRUS-PROP-\d+>.+
.+?\s*<MIR-\d+>\s*[^\[]+?\s*(?:<EXP-V-\d+>|<ASSC-PHRASE-\d+>)\s*[^\]]+?\s*<VACCVIRUS-PROP-\d+>.+
[^SYMBOLS] - Class of symbols. <^> At the beginning mean 'I DON'T want match them'.
[abc]{1} - I will match <a> or <b> or <c>
[^abc]{1} - I will NOT match <a> or <b> or <c>
@sent = ("text <MIR-1> GGG-33 <EXP-V-3> text text <VACCVIRUS-PROP-1> some other.",
         " text <MIR-1> text <ASSC-PHRASE-1> text <VACCVIRUS-PROP-1> some other <PATTERN-1> other.");

foreach $sent (@sent) {
   if ( $sent =~ /.*<MIR-\d+>.*<(?:EXP-V|ASSC-PHRASE)-\d+>.*<VACCVIRUS-PROP-\d+>.*/gi ) {
      print "$sent\n";
    }
}
.*<MIR-\d+>.*<EXP-V-\d+>.*<VACCVIRUS-PROP-\d+>.*|.*<MIR-\d+>.*<ASSC-PHRASE-\d+>.*<VACCVIRUS-PROP-\d+>.*
.*<MIR-\d+>.*<(?:EXP-V|ASSC-PHRASE)-\d+>.*<VACCVIRUS-PROP-\d+>.*