из этой строки, (champs1 (champs6 donnee_o donnee_f) [(champs2 [] (champs3 _YOJNJeyyyyyyB (champs4 donnee_x)) (debut 144825 25345) (fin 244102 40647)), (champs2 [] (champs3 _FuGNJeyyyyyyB (champs4 donnee_z)) (debut 796443 190570) (fin 145247 42663))] [] []).
, я хотел бы извлечь первое число после слова «дебют» и первое число после слова «fin». Я пишу это:[Perl]: прочитайте каталог и файлы, а regex
while (my $readfile = <FILE>) #read each line and check the first value X1 after the word "coorDeb" and the first value X2 after the word "coorFin"
{
my ($line) = $_;
chomp ($line);
($first, $second)= ~m/coorDeb/\s\S*\s\S*\s\S*\s\S*\s\S*; #CoorDeb first, following by X1
$X1=$first; $X4=$second;
$lenght1=$second-$first; # Calculation of the lenght of first segment
$line =~ m//coorFin/(\s*)\S*\s*\S*\s*\S*\s*\S*\s*(\S*/); #CoorFin first, following by X1
$lenght2=$second-$first; # Calculation of the lenght of first segment
push(@elements1, $lenght1); #Push the lenght into a table to compute the mean of lenght for the segment n°1
push(@elements2, $lenght2); #Push the lenght into a table to compute the mean of lenght for the segment n°2
}
Может ли кто-нибудь помочь мне с регулярным выражением, пожалуйста? Спасибо.
@tongium, код был отредактирован, чтобы сделать его доступным для чтения. Пожалуйста, проверьте, что это все еще то, что вы хотели. @Nathan, я вернул ваше редактирование, так как code/pre заполняет символы <>, думая, что они HTML. – paxdiablo
Пожалуйста, используйте оператор повторения {M, N} Например, (\ S * \ s *) {5} –
@Pax, не проблема, но как насчет того, чтобы строка была максимально читаема? –