1

複数のパターンに一致するPerlで正規表現を考え出しpreg_match_all、PHPのようにそれらすべてを返すようにしています。

ここに私が持っているものがあります:

$str = 'testdatastring';
if($str =~ /(test|data|string)/) {
        print "its found index location: $0 $-[0]-$+[0]\n";
        print "its found index location: $1 $-[1]-$+[1]\n";
        print "its found index location: $2 $-[2]-$+[2]\n";
        print "its found index location: $3 $-[3]-$+[3]\n";
}

これは、「テスト」である最初の一致のみを提供します。指定されたパターン「test」、「data」、および「string」のすべての出現に一致できるようにしたいと考えています。

PHP では、この種の目的で preg_match_all を使用できることを知っています。

if(preg_match_all('/(test|data|string)/', 'testdatastring', $m)) {
        echo var_export($m, true);
}

上記の PHP コードは、'test'、'data'、'string' の 3 つの文字列すべてに一致します。

Perlでこれを行う方法を知りたいです。どんな助けでも大歓迎です。

4

2 に答える 2

12

に相当する Perl

preg_match_all('/(test|data|string)/', 'testdatastring', $m)

@m = ("testdatastring" =~ m/(test|data|string)/g);

/g フラグはグローバルを表すため、リスト コンテキストで一致するリストを返します。

于 2009-06-04T06:13:14.767 に答える
2

http://www.anaesthetist.com/mnm/perl/regex.htmを参照してください。基本的な構文(そこから)は次のとおりです。

$_ = "alpha xbetay xgammay xdeltay so on";
($first, $second, $third) = /x(.+?)y/g;

/g に注意してください

于 2009-06-04T06:04:45.063 に答える