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

你可以

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

由于您尚未回复我的上一个查询,我将假设一个单词如果只有数字(和/或下划线)则不算作一个单词,例如12并且1_2不被视为单词。

在这种情况下,我建议使用这个正则表达式:

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

正则表达式101演示

(?=[A-Z0-9_]*[A-Z])是一个积极的前瞻,并确保正则表达式中至少有一个大写字符。如果您认为1_2是一个词,请(?=[A-Z0-9_]*[A-Z_])改用。

\b是一个单词边界,确保您要查找的单词没有小写字符。

[A-Z0-9_]A-Z是一个字符类,将匹配(大写字母)、0-9(数字)和下划线范围内的任何字符。

+表示前一个组或字符可以出现 1 次或多次。

于 2013-10-05T20:18:13.077 回答