0

私は Perl の初心者で、Perl 正規表現のヘルプが必要です。大文字および/または数字とアンダースコア文字のみを含むことができるファイルから単語を抽出したいと考えています (単語の先頭または末尾、または中間のいずれか)。単語の区切り文字は、空白またはその他の非大文字、非数字、非アンダースコアにすることができます。

3 つの例:

abcd _PARAM123="dfd"; (I want to extract _PARAM123)
abcd PARAM2_:12; (I want to extract PARAM2_)
abcd PARA_M-1; (I want to extract PARA_M)
4

2 に答える 2

1

あなたは私の最後の質問に答えていないので、たとえば、数字 (および/またはアンダースコア) だけがあり、単語と見なされない場合、単語は単語としてカウントされないと仮定し12ます1_2

その場合、次の正規表現をお勧めします。

(?=[0-9_]*[A-Z])\b[A-Z0-9_]+\b

正規表現101のデモ

(?=[A-Z0-9_]*[A-Z])は肯定的な先読みであり、正規表現に少なくとも 1 つの大文字があることを確認します。1_2単語と考える場合は、(?=[A-Z0-9_]*[A-Z_])代わりに使用してください。

\bは単語の境界であり、探している単語に小文字が付加されないようにするものです。

[A-Z0-9_]A-Zは文字クラスであり、 (大文字)、0-9(数字)、およびアンダースコアの範囲内の任意の文字と一致します。

+は、前のグループまたは文字が 1 回以上出現する可能性があることを意味します。

于 2013-10-05T20:18:13.077 に答える
1

あなたはできる

my @words = $str =~ /( [A-Z_] [0-9A-Z_]+ )/xg;
于 2013-10-05T17:56:02.900 に答える