Perl-字母序列中的部分模式匹配

Perl-字母序列中的部分模式匹配,perl,pattern-matching,partial,Perl,Pattern Matching,Partial,我试图使用perl找到一种模式。但我只对模式的开始和结束感兴趣。更具体地说,我有一个字母序列,我想看看下面的模式是否存在。共有23个字符。我只对序列的开头和结尾感兴趣 例如,我想提取以ab开头,以zt结尾的任何内容。总是有 所以它是可以的 abaaaaaaaaaaaaaaaaaaazt 这样它就能检测到这个匹配 但不是 到目前为止我试过了 if ($line =~ /ab[*]zt/) { print "found pattern "; } 谢谢*是一个量词和元字符。在字符类括

我试图使用perl找到一种模式。但我只对模式的开始和结束感兴趣。更具体地说,我有一个字母序列,我想看看下面的模式是否存在。共有23个字符。我只对序列的开头和结尾感兴趣

例如,我想提取以ab开头,以zt结尾的任何内容。总是有 所以它是可以的

abaaaaaaaaaaaaaaaaaaazt   
这样它就能检测到这个匹配 但不是

到目前为止我试过了

if ($line =~ /ab[*]zt/) {
    print "found pattern ";
}

谢谢

*
是一个量词和元字符。在字符类括号内,它只表示文字星号。您可能会想到
*
,它是一个后跟量词的通配符

匹配整个字符串,例如
“abaazt”

注意锚定符
^
$
,通配符
后跟零个或多个
*
量词

匹配另一个字符串中的子字符串,例如
“a b abaazt c d”

使用单词边界
\b
来表示开始和结束,而不是锚定。您还可以更具体地:

/(?<!\S)ab\S*zt(?!\S)/
您提到字符串是23个字符,如果这是一个固定长度,您可以得到更具体的,例如

/^ab.{19}zt$/

正好匹配19个通配符。
{}
量词的语法是
{min,max}
,任何留空的值表示无限,即
{1,}
+
相同,
{0,}
*
相同,分别表示一个/零个或多个匹配项。

*
是量词和元字符。在字符类括号内,它只表示文字星号。您可能会想到
*
,它是一个后跟量词的通配符

匹配整个字符串,例如
“abaazt”

注意锚定符
^
$
,通配符
后跟零个或多个
*
量词

匹配另一个字符串中的子字符串,例如
“a b abaazt c d”

使用单词边界
\b
来表示开始和结束,而不是锚定。您还可以更具体地:

/(?<!\S)ab\S*zt(?!\S)/
您提到字符串是23个字符,如果这是一个固定长度,您可以得到更具体的,例如

/^ab.{19}zt$/

正好匹配19个通配符。
{}
量词的语法是
{min,max}
,任何值留空表示无限,即
{1,}
+
相同,
{0,}
*
相同,分别表示一个/零个或多个匹配项。

仅仅一个
*
本身不会匹配任何东西(除了文字
*
),如果要匹配任何需要使用的内容,请使用
*

if ($line =~ /^ab.*zt$/) {
    print "found pattern ";
}
如果确实要捕获匹配,请将整个模式包装在捕获组中:

if (my ($string) = $line =~ /^(ab.*zt)$/) {
    print "found pattern $string";
}

如果您想匹配您需要使用的任何内容,仅一个
*
本身不会匹配任何内容(除了文字
*

if ($line =~ /^ab.*zt$/) {
    print "found pattern ";
}
如果确实要捕获匹配,请将整个模式包装在捕获组中:

if (my ($string) = $line =~ /^(ab.*zt)$/) {
    print "found pattern $string";
}

是的,这段代码应该可以工作。你的问题是什么?@TLP谢谢。我发现了我正在做的错误并更新了问题。当使用Perl正则表达式出现问题时,阅读Perl正则表达式教程()和参考()可能会有用。Perl文档真的很好。为什么不试一试呢?谢谢@DaveCross。我会看一看。是的,那段代码应该可以工作。你的问题是什么?@TLP谢谢。我发现了我正在做的错误并更新了问题。当使用Perl正则表达式时,阅读Perl regex教程可能会有用()和reference()。Perl文档真的很好。为什么不试一试呢?谢谢@DaveCross。我会看一看。我无法完成这项工作。我做了很长的工作,使用了/aa[a-Z][a-Z]…[a-Z]zt/。这一个正在工作。我还想知道/打印它匹配的序列。可能吗?@user1007742:1)你为什么用那种方式?2)
[A-Z]
是大写字符。我的意思是[A-Z]。我知道这不是最好的办法。更准确地说,我有一个非常长的字母序列,我想捕获所有匹配项并将它们全部打印出来。@user Define“this”<代码>[a-z]{19}应该可以正常工作,除非您的字符串不是您想象的那样。我无法获得此工作。我走了很长的路,使用了/aa[A-Z][A-Z]…[A-Z]zt/。这个正在工作。我还想知道/打印它匹配的序列。可能吗?@user1007742:1)你为什么用那种方式?2)
[A-Z]
是大写字符。我的意思是[A-Z]。我知道这不是最好的办法。更准确地说,我有一个非常长的字母序列,我想捕获所有匹配项并将它们全部打印出来。@user Define“this”
[a-z]{19}
应该可以正常工作,除非您的字符串不是您想象的那样。我想捕获匹配。但这似乎不起作用,它没有输出任何东西。更准确地说,我有一个非常长的字母序列,我想捕获所有匹配并打印它们。我想捕获匹配。但这似乎不起作用,它没有输出任何东西。更准确地说,我有一个非常长的字母序列,我想捕获所有匹配并打印它们。