我是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)
答案 0 :(得分:1)
你可以
my @words = $str =~ /( [A-Z_] [0-9A-Z_]+ )/xg;
答案 1 :(得分:1)
由于您没有回复我的上一个查询,我将假设如果只有数字(和/或下划线),则单词不算作单词,例如12
和{ {1}}不被视为单词。
在这种情况下,我建议这个正则表达式:
1_2
(?=[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
表示前一个组或角色可以出现一次或多次。