when :"!STOV&!RET&( (!DFTRAMBYP&( (TENA&!QNAPA&!CENA) | ( !TENA&!TQNAPA&!TCENA) ) ) | DFTRAMBYP)&!EMAA[2]&!EMAA[1]&!EMAA[0]&!EMASA“ 如何使用perl从这段字符分割出下面三个when: “!STOV&!RET& (!DFTRAMBYP&( (TENA&!QNAPA&!CENA) )&!EMAA[2]&!EMAA[1]&!EMAA[0]&!EMASA “ when: “!STOV&!RET&(!DFTRAMBYP& ( !TENA&!TQNAPA&!TCENA)&!EMAA[2]&!EMAA[1]&!EMAA[0]&!EMASA” when: “!STOV&!RET&& DFTRAMBYP&!EMAA[2]&!EMAA[1]&!EMAA[0]&!EMASA请注意所有的字符名称均可改变
时间: 2023-09-03 15:11:04 浏览: 76
可以使用Perl的正则表达式来实现从这段字符中分割出三个when的操作。具体实现方法如下:
```
my $str = '!STOV&!RET& (!DFTRAMBYP&( (TENA&!QNAPA&!CENA) )&!EMAA[2]&!EMAA[1]&!EMAA[0]&!EMASA !STOV&!RET&(!DFTRAMBYP& ( !TENA&!TQNAPA&!TCENA)&!EMAA[2]&!EMAA[1]&!EMAA[0]&!EMASA !STOV&!RET&& DFTRAMBYP&!EMAA[2]&!EMAA[1]&!EMAA[0]&!EMASA';
# 匹配第一个when
if ($str =~ /(!STOV&!RET&\s*\(\s*(!DFTRAMBYP&\s*\(\s*(TENA&!QNAPA&!CENA|\!TENA&!TQNAPA&!TCENA)\s*\)\s*)\s*\)&!EMAA\[2\]&!EMAA\[1\]&!EMAA\[0\]&!EMASA)/) {
my $when1 = $1;
print "when 1: $when1\n";
}
# 匹配第二个when
if ($str =~ /(!STOV&!RET&\s*\(\s*!DFTRAMBYP&\s*\(\s*\!TENA&\!TQNAPA&\!TCENA\s*\)\s*&!EMAA\[2\]&!EMAA\[1\]&!EMAA\[0\]&!EMASA)/) {
my $when2 = $1;
print "when 2: $when2\n";
}
# 匹配第三个when
if ($str =~ /(!STOV&!RET&&\s*DFTRAMBYP&!EMAA\[2\]&!EMAA\[1\]&!EMAA\[0\]&!EMASA)/) {
my $when3 = $1;
print "when 3: $when3\n";
}
```
解释一下上面的正则表达式:
- 第一个when的正则表达式:/(!STOV&!RET&\s*\(\s*(!DFTRAMBYP&\s*\(\s*(TENA&!QNAPA&!CENA|\!TENA&!TQNAPA&!TCENA)\s*\)\s*)\s*\)&!EMAA\[2\]&!EMAA\[1\]&!EMAA\[0\]&!EMASA)/
- 匹配条件:!STOV&!RET&,后面跟着括号(可以包含空格),括号内的内容是(!DFTRAMBYP&( (TENA&!QNAPA&!CENA) ) | ( !TENA&!TQNAPA&!TCENA) )
- 第二个括号内的正则表达式:(!DFTRAMBYP&\s*\(\s*(TENA&!QNAPA&!CENA|\!TENA&!TQNAPA&!TCENA)\s*\)\s*)
- 匹配条件:!DFTRAMBYP&,后面跟着括号(可以包含空格),括号内的内容是(TENA&!QNAPA&!CENA)或(!TENA&!TQNAPA&!TCENA)
- 匹配后面的条件:&!EMAA\[2\]&!EMAA\[1\]&!EMAA\[0\]&!EMASA
- 第二个when的正则表达式:/(!STOV&!RET&\s*\(\s*!DFTRAMBYP&\s*\(\s*\!TENA&\!TQNAPA&\!TCENA\s*\)\s*&!EMAA\[2\]&!EMAA\[1\]&!EMAA\[0\]&!EMASA)/
- 匹配条件:!STOV&!RET&,后面跟着括号(可以包含空格),括号内的内容是!DFTRAMBYP&(!TENA&!TQNAPA&!TCENA)
- 匹配后面的条件:&!EMAA\[2\]&!EMAA\[1\]&!EMAA\[0\]&!EMASA
- 第三个when的正则表达式:/(!STOV&!RET&&\s*DFTRAMBYP&!EMAA\[2\]&!EMAA\[1\]&!EMAA\[0\]&!EMASA)/
- 匹配条件:!STOV&!RET&&,后面跟着DFTRAMBYP&
- 匹配后面的条件:&!EMAA\[2\]&!EMAA\[1\]&!EMAA\[0\]&!EMASA
阅读全文