cac*_*moi 1 regex arrays string perl
我有这个字符串:
my $line = "MZEFSRGGRMEAZFE*MQZEFFMAEZF*"
Run Code Online (Sandbox Code Playgroud)
我想找到每个子字符串开头M和结尾*,而不是*在它们之内.这意味着上面的字符串会给我最后一个数组中的4个元素.
@ORF= (MZEFSRGGRMEAZFE*,MEAZFE*, MQZEFFMAEZF*,MAEZF*)
Run Code Online (Sandbox Code Playgroud)
一个简单的正则表达式不会做,因为它找不到重叠的子串.有一个简单的方法吗?
正则表达式匹配在匹配时消耗模式 - 这是设计的.
您可以使用超前表达式来避免这种情况发生PerlMonks:使用Look-ahead和Look-behind
所以像这样的东西会起作用:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
my $line = "MZEFSRGGRMEAZFE*MQZEFFMAEZF*";
my @matches = $line =~ m/(?=(M[^*]+))/g;
print Dumper \@matches;
Run Code Online (Sandbox Code Playgroud)
哪个给你:
$VAR1 = [
'MZEFSRGGRMEAZFE',
'MEAZFE',
'MQZEFFMAEZF',
'MAEZF'
];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |