0

以下のいくつかの名前のパターンマッチを行っています:

ABCD123_HH1
ABCD123_HH1_K

さて、上記の名前をgrepする私のコードは以下の通りです:

($name, $kind) = $dirname =~ /ABCD(\d+)\w*_([\w\d]+)/; 

今、私が直面している問題はABCD123_HH1、 、ABCD123_HH1_Kinの両方のパターンを取得することです$dirname。ただし、私の変数$kindは this を取りませんABCD123_HH1_K。それはABCD123_HH1パターンを取ります。

あなたの時間を大切にしてください。でパターンを取得するために何ができるか教えてください_k

4

3 に答える 3

4

_Kこの部分を正規表現の最後に追加し、次のオプションでオプションにする必要があり?ます。

/ABCD(\d+)_([\w\d]+(_K)?)/

も消去しましたが\w*、これは役に立たず、正しく取得できませんHH1_K

于 2013-03-08T19:15:34.533 に答える
1

You should check for zero or more occurrences of _K.

* in Perl's regexp means zero or more times

+ means atleast one or more times.

Hence in your regexp, append (_K)*.

Finally, your regexp should be this:

/ABCD(\d+)\w*_([\w\d]+(_K)*)/
于 2013-03-08T19:19:08.747 に答える
0

\w文字、数字、およびアンダースコアが含まれます。

したがって、次のような単純なものを使用できます。 /ABCD\w+/

于 2013-03-08T19:24:56.833 に答える