Perl Regex中的锚点

Perl Regex中的锚点

Perl Regex中,锚点根本不匹配任何字符。相反,它们匹配的是字符之前、之后或之间的一个特定位置。
以下是Perl Regex中各自的锚点。

'^' '$', '\b', '\A', '\Z', '\z', '\G', '\p{....}', '\P{....}', '[:class:]'

^ 或 \A : 它匹配字符串开头的模式。

语法: (/^pattern/, //Apattern/)

例子

#!/usr/bin/perl
str = "guardians of the galaxy";
  
# prints the pattern as it is
# starting with 'guardians'
print "&\n" if(str =~ /^guardians/);
  
# prints the pattern 'gua'
print "&\n" if(str =~ /\Agua/);
  
# prints nothing because 
# the 0th position doesn't start with 'a'
print "&" if($str =~ /^ans/)

输出。

guardians
gua

$ 或 \z : 它匹配字符串末尾的模式。

语法: (/pattern$/, /pattern/z/)

例子

#!/usr/bin/perl
str = "guardians of the galaxy";
  
# prints nothing as it is not 
# ending with 'guardians'
print "&\n" if(str =~ /guardians/);
  
# prints the pattern 'y'
print "&\n" if(str =~ /y\z/);
  
# prints the pattern as it is 
# ending with 'galaxy'
print "&" if(str =~ /galaxy$/)

输出。

y
galaxy

\ b :它在从\ w 到\W的字符串的单词边界进行匹配 。 准确地说,如果字符串是一个单词,它要么与字符串的开头或结尾匹配,要么与一个单词字符或一个非单词字符匹配。

语法:(/\bpattern/b/)

例子

#!/usr/bin/perl
str = "guardians-of-the-galaxy";
  
# prints '-galaxy' as it forms
# a word even with '-'.
print "&\n" if(str =~ /\b-galaxy\b/);
  
# prints '-guardians' as it forms 
# a word even with '-'.
print "&\n" if(str =~ /\bguardians-\b/);
  
# prints nothing as it is bounded
# with a character 't'.
print "&" if(str =~ /\be-galaxy\b/);
  
# prints 'guardians-of-the-galaxy' as it
# is bounded with the beginning and end.
print "&" if($str =~ /\bguardians-of-the-galaxy\b/);

输出。

-galaxy
guardians-
guardians-of-the-galaxy

\Z : 它在字符串的结尾或换行前匹配。 \z’和 \Z’都与 $ 不同,它们不受 /m “多行 “标志的影响,后者允许 $ 在任何行的末端匹配。

#!/usr/bin/perl
  
# Prints one due to m//
print "one\n" if ('galaxy' =~ m/galaxy\z/);
  
# Prints two due to m//
print "two\n" if('galaxy' =~ m/galaxy\Z/);
  
# Prints three due to /Z 
# as it forms a newline
print "three\n" if ("galaxy\n" =~ m/galaxy\Z/);
  
# Prints four due to m// as 
# the line ended \z gets affected
print "four\n" if ("galaxy\n" =~ m/galaxy\n\z/);
  
# Prints five as it forms a new line
print "five\n" if("galaxy\n" =~ m/galaxy\n\Z/);
  
# Due to the "" it forms a newline and 
# \z doesn't get affected. Prints nothing
print "six" if("galaxy\n" =~ m/galaxy\z/);

输出。

one
two
three
four
five

\ 匹配:它在指定的位置进行匹配。如果一个模式的长度是5,那么它从字符串的开始到5个位置,如果模式是有效的,那么它被迫从第6个位置开始检查字符串,以这种方式向前移动,直到模式无效或字符串结束。

#!/usr/bin/perl
str = "galaxy8222as";
  
# prints until the pattern is valid
print "one:& " while(str =~ /\G[a-z]{2}/gc);
print "\n";
  
# prints until the pattern is valid
print "two:& " while("1122a44" =~ /\G\d\d/gc);
print "\n";
  
# Take the string as a new value and 
# searches from the start to false
print "three: & " while("galaxy8222as" =~ /\G\w{2}/gc);
print "four:& " while(str =~ /\G[a-z]{2}/gc);
  
# Take the false position of the 
# above string and searches from there
# Prints if the pattern is valid from that position 
# onwards(prints nothing). As it is false 
# it stays at the same position as before.
print "\n";
print "five:& " while($str =~ /\G\w{2}/gc);

输出。

one: ga one: la one: xy 
two: 11 two: 22 
three: ga three: la three: xy three: 82 three: 22 three: as 
five: 82 five: 22 five: as

\ p{...}\P{...}\p{...}匹配Unicode字符类,如IsLower, IsAlpha等,而 \P{....}是Unicode字符类的补充。

#!/usr/bin/perl
  
# unicode class is the pattern to match
print "&" while("guardians!@#%^*123" =~ /\p{isalpha}/gc);
print "\n";
  
# unicode class is the pattern to match
print "&" while("guardians!@#%^&*123" =~ /\p{isalnum}/gc);
print "\n";
  
# here L matches the alphabets where \P is the complement
print "&" while("guardians!@#%^&*123" =~ /\P{L}/gc);
print "\n";
  
# here L matches the alphabets where \p is non-complement
print "&" while("guardians!@#%^&*123" =~ /\p{L}/gc);

输出。

guardians
guardians123
!@#%^&*123
guardians

[:class:] : POSIX字符类,如数字、小写、ascii等。

语法: (/[[:class:]]/)

POSIX字符类别如下。

alpha, alnum, ascii, blank, cntrl, digit, graph, lower, punct, space, upper, xdigit, word
#!/usr/bin/perl
  
# prints only alphabets
print "&" while('guardians!@#%^&*123' =~ /[[:alpha:]]/gc);
print "\n";
  
# prints characters and digits
print "&" while("guardians!@#%^&*123" =~ /[[:alnum:]]/gc);
print "\n";
  
# prints only digits
print "&" while("guardians!@#%^&*123" =~ /[[:digit:]]/gc);
print "\n";
  
# prints anything except space " ".
print "&" while("guardians!@#%^& 123\n" =~ /[[:graph:]]/gc);
print "\n";
  
# prints the 1 as it gets matched to 
# space " " or horizontal tab.
print "1" while("guardians!@#%^& 123\n" =~ /[[:blank:]]/gc);
print "\n";
  
# prints lowercase characters
print "&" while("Guardians!@#%^& 123\n" =~ /[[:lower:]]/gc);
print "\n";
  
# prints all ascii characters
print "&" while("guardians!@#%^& 123\n" =~ /[[:ascii:]]/gc);

输出。

guardians
guardians123
123
guardians!@#%^&123
1
guardians
guardians!@#%^& 123

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程