2009-06-04 10 views
1

私は、複数のパターンにマッチするPerlで正規表現を思いついて、PHPでpreg_match_allのようなものをすべて返そうとしています。ここでPerlでグローバル正規表現マッチを行うにはどうすればよいですか?

は、私が持っているものです。

$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"; 
} 

これは私にこの中に「試験」である最初の試合を提供します。私は指定されたパターンのすべての出現、 'テスト'、 'データ'と '文字列'を照合できるようにしたい。

私はPHPで、あなたが目的のこの種のpreg_match_allを使用することができることを知っている「テスト」、「データ」と「文字列」:上記のPHPコードは、すべての3つの文字列に一致します

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

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

答えて

10

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

にPerlの等価/ gでフラグは、グローバルの略

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

ありますリストコンテキストで一致するリストを返します。

+0

これをif/elseステートメントにどのように適用しますか? – Carel

+0

これを解決しました:if(@list = $ str =〜Regex){True} {False}/regex/gを使用して、見つかった項目をリストにグループ化します。 – Carel

2

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

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

注/ gで