我是 PERL 新手,正在开发一个正则表达式来仅匹配等于或超过 3 个字母的单词。这是我正在尝试的程序。我尝试添加 \w{3,} 因为它应该匹配 3 个以上字符。但它仍然匹配单词中 <3 个字符。例如,如果我给出“这是一个模式”。我希望我的 $field 仅匹配“This”和“Pattern”并跳过“is”和“a”。
#!/usr/bin/perl
while (<STDIN>) {
foreach my $reg_part (split(/\s+/, $_)) {
if ($reg_part =~ /([^\w\@\.]*)?([\w{3,}\@\(\)\+\$\.]+)(?::(.+))?/) {
print "reg_part = $reg_part \n";
my ($mod, $field, $pat) = ($1, $2, $3);
print "#$mod#$field#$pat#$negate#\n";
}
}
}
exit(0);
Run Code Online (Sandbox Code Playgroud)
我缺少什么?
打破你的正则表达式。
您知道您需要三个单词字符,因此请指定:-
# Match three word characters.
\w{3}
Run Code Online (Sandbox Code Playgroud)
之后,你并不关心这个词是否有更多的字符,但你也不会阻止它。
# Match 0 or more word characters
\w*
Run Code Online (Sandbox Code Playgroud)
最后,您要确保有边界来捕捉单词的结尾。所以,把它们放在一起。要匹配具有至少三个单词字符(可能更多)的单词,请使用:-
# Word boundaries at start and end
\b\w{3}\w*\b
Run Code Online (Sandbox Code Playgroud)
注意 -\w匹配字母数字 - 如果您只需要字母:-
# Alpha only
\b[A-Za-z]{3}[A-Za-z]*\b
Run Code Online (Sandbox Code Playgroud)
你有
[\w{3,}...]+
Run Code Online (Sandbox Code Playgroud)
这与以下相同
[{},3\w...]+
Run Code Online (Sandbox Code Playgroud)
我想你想要
(?:\w{3,}|[\$\@()+.])+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21084 次 |
| 最近记录: |