我在理解基本规则时遇到了很多麻烦regex
,希望有人可以用“简单的英语”帮助解释它们。
$_ = '1: A silly sentence (495,a) *BUT* one which will be useful. (3)';
print "Enter a regular expression: ";
my $pattern = <STDIN>;
chomp($pattern);
if (/$pattern/) {
print "The text matches the pattern '$pattern'.\n";
print "\$1 is '$1'\n" if defined $1;
print "\$2 is '$2'\n" if defined $2;
print "\$3 is '$3'\n" if defined $3;
print "\$4 is '$4'\n" if defined $4;
print "\$5 is '$5'\n" if defined $5;
}
三个测试输出
Enter a regular expression: ([a-z]+)
The text matches the pattern '([a-z]+)'
$1 is 'silly'
Enter a regular expression: (\w+)
The text matches the pattern '(\w+)'
$1 is '1'
Enter a regular expression: ([a-z]+)(.*)([a-z]+)
The text matches the pattern '([a-z]+)(.*)([a-z]+)'
$1 is 'silly'
$2 is " sentence (495,a) *BUT* one which will be usefu'
$3 is 'l'
我的困惑如下
并不
([a-z]+)
意味着“小写字母和一个/多个重复”?如果是这样,“将”不应该也被拾起吗?除非它与 () 有关记忆有关(即“silly”是 5 个字母的单词,所以“will”不会被选中,但“willx”会??)不
(\w+)
意味着“任何单词和一个/多个重复”?如果是这样,为什么会选择数字“1”,因为后面没有重复,而是冒号“:”?是否
([a-z]+)(.*)([a-z]+)
意味着“任何小写并重复”,紧随其后的是“任何东西和0个或更多重复”,紧随其后的是“任何小写并重复”?如果是这样,为什么输出看起来像上面显示的那样?
我试图尽可能多地在网上查找,但仍然无法理解它们。任何帮助将不胜感激。谢谢你。