使用可选数字和下划线字符提取大写单词

时间:2013-10-05 17:52:41

标签: regex perl

我是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)

2 个答案:

答案 0 :(得分:1)

你可以

my @words = $str =~ /( [A-Z_] [0-9A-Z_]+ )/xg;

答案 1 :(得分:1)

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

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

1_2

regex101 demo

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

(?=[A-Z0-9_]*[A-Z_])是一个单词边界,可以确保您正在寻找的单词上没有附加小写字符。

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

0-9表示前一个组或角色可以出现一次或多次。