2016-11-13 7 views
-1

パターンが配列(複数の文字列を含む)か単一の文字列かどうかをチェックする方法は?それはそれとして、それを維持する他のパターンにそれらを分割するよりも、配列ならpatterenに複数のパターンが含まれていないかどうかを確認してください。 1つの文字列(型配列)

は、

If ($_ =~ /#define\s+(\S+)\s*(.*)/gi) 

.. 
#Check if $2 is array or a single string 
If ($2 

を次の例を考えてみましょうか?

お勧めします。

ありがとうございます。

答えて

0

いくつかの基本的な規則と用語です。正規表現のマッチは、単一値の変数である文字列、スカラーで行われます。 の配列の変数は、値のリストを表す項目のコレクションに関連付けられています。おそらく、Perl-variable-typesperlintro、正規表現はperlretutで始めることができます。

表示されている例では、変数$_にパターンをチェックする文字列が含まれています。

match演算子は、パターン内の括弧で取り込まれた一致のリストを返します。 /g修飾子では、動作はより複雑で、正規表現がスカラーで使用されるか、リストコンテキストで使用されるかによって異なります。詳しくはRegexp-Quote-Like-Operators in perlopを参照してください。要するに、配列(当時/gは必要ありません)

my @matches = $_ =~ /#define\s+(\S+)\s*(.*)/i; 

に試合のそのリストを割り当てると、あなたは、配列

if (@matches == 0) { 
    print "There were no matches\n"; 
} 
elsif (@matches == 1) { 
    print "Found one match: $matches[0]\n"; 
} 
else { 
    print "Found more than one: @matches\n"; 
} 

に空をチェックする別の方法を要素の数を確認することができます配列はif (not @matches)です。

これは、単語\S+と余分な行.*をキャプチャします.#defineの前にスペースを入れます。正規表現では、これを文字列のどこにでも置くことができます。実際には、最初に指定しなければならない場合は、先頭にオプションのスペースを入れてアンカーを追加してください。/^\s*.../

+0

@ divesh-rastogi少し更新しました。特に、 '/ g'に関するコメントを改め、説明を追加しました。正規表現もう一度見直したいかもしれません。私は基本を読んでみることをお勧めします - それは全く時間がかかりませんが、人生をはるかに簡単で素敵にするでしょう:)。帰属ありがとうございます。 – zdim

関連する問題