2

私はこれに一致するパターンを考え出すことを探しています:

(単語単語単語単語) | 1234.5678% | (1234)

(words words words words)$1として、(1234)$2として保持したい場合

入力ファイルは次のようになります。

Header Crap | More Header Crap|Header Crap | More Header Crap|(words words words words) | 1234.5678% | (1234) | (words words words words) | 1234.5678%        |   (1234)(words words words words) | 1234.5678% | (1234) | (words words words words) |   1234.5678% | (1234)(words words words words) | 1234.5678% | (1234) | (words words words words) | 1234.5678% | (1234) | (words words words words) | 1234.5678% | (1234) | (words words words words) | 1234.5678% | (1234)

私が信じている問題は、入力に関係しています。それは 1 つの大きな塊として入ってきます (IE $_ は、一致を見つけるために解析する必要がある 1 つの大きなデータ文字列です)

私が試したこと:

while ($_ =~ /(.*)\|{1}\d*?\.{1}\d*?%{1}\|{1}(\d*)/ {
do stuff with $1 and $2
}

としても

@matches = $_ =~ /(.*)\|{1}\d*?\.{1}\d*?%{1}\|{1}(\d*)/

そして、これらの両方に他の同様のバリエーションがたくさんあります。正しい方向へのガイダンスを探しているだけです。どんな助けでも大歓迎です!

4

5 に答える 5

0
use strict;
use warnings;
use 5.014;  

my $str = <<END_OF_STRING;
Header Crap | More Header Crap|Header Crap | More Header
Crap|(words words 1 words words) | 1234.5678% | (1234 1) | 
(words words 2 words words) | 1234.5678% |(1234 2)(words words 3 words words) 
| 1234.5678% | (1234 3) | (words words 4 words words) |  
1234.5678% | (1234 4)(words words 5 words words) | 
1234.5678% | (1234 5) | (words words 6 words words) | 1234.5678% |
(1234 6) | (words words 7 words words) | 1234.5678% | (1234 7) | 
(words words 8 words words) | 1234.5678% | (1234 8)
END_OF_STRING

my $paren_clause = <<END_OF_CLAUSE;
(
    [(]     #An opening parenthesis
    [^)]+   #followed by not a closing parenthesis, one or more times
    [)]     #followed by a closing parenthesis.
)
END_OF_CLAUSE

my $not_paren_clause = "[^(]+";  #Not an opening parenthesis, one or more times

my $pattern = <<END_OF_PATTERN;
    $paren_clause 
    $not_paren_clause
    $paren_clause
END_OF_PATTERN

while ($str =~ /$pattern/xmsg) {
    say "$1 $2";
}

--output:--
(words words 1 words words) (1234 1)
(words words 2 words words) (1234 2)
(words words 3 words words) (1234 3)
(words words 4 words words) (1234 4)
(words words 5 words words) (1234 5)
(words words 6 words words) (1234 6)
(words words 7 words words) (1234 7)
(words words 8 words words) (1234 8)
于 2013-07-27T03:25:03.093 に答える