如何使用 Perl 正则表达式匹配 S10101010 类型的字符串?
How do I match a string of the type S10101010 using a Perl regular expression?
我想匹配以下类型的字符串:
S10101010...
下面的脚本 matches/prints 只是“S10”。我该如何解决?
$in = <STDIN>;
print $in=~/S(10)+/;
您可以使用 (?:)
分组,但不能捕获 10
use warnings;
use strict;
my $in = 'abc S101010 def';
$in =~ /(S(?:10)+)/;
print "\n";
外括号捕获到</code>.</p>
<p>打印:</p>
<pre><code>S101010
要检查它是否完全匹配,你需要
/^S(?:10)+\z/
^
表示字符串的开始。
\z
表示字符串结束。
(?:...)
用于正则表达式中的分组。 ((...)
是捕获)。
如果您从 STDIN 读取,请不要忘记使用 chomp
清除最后的换行符,或者使用 $
而不是 \z
以允许结尾换行符.
比赛将在 $&
.
if ( "S10101010" =~ /^S(?:10)+\z/ ) {
say $&; # S10101010
}
您也可以使用捕获。
if ( my ($match) = "S10101010" =~ /^ ( S(?:10)+ ) \z/x ) {
say $match; # S10101010
}
(也使用 /x
允许的空格。)
当然,由于您要匹配整个字符串,您也可以只打印输入,如以下完整示例所示:
use 5.014;
use warnings;
defined( my $s = <> )
or die("Premature EOF\n");
chomp($s);
if ( $s =~ /^S(?:10)+\z/ ) {
say $s;
} else {
say "[no match]";
}
我想匹配以下类型的字符串:
S10101010...
下面的脚本 matches/prints 只是“S10”。我该如何解决?
$in = <STDIN>;
print $in=~/S(10)+/;
您可以使用 (?:)
10
use warnings;
use strict;
my $in = 'abc S101010 def';
$in =~ /(S(?:10)+)/;
print "\n";
外括号捕获到</code>.</p>
<p>打印:</p>
<pre><code>S101010
要检查它是否完全匹配,你需要
/^S(?:10)+\z/
^
表示字符串的开始。
\z
表示字符串结束。
(?:...)
用于正则表达式中的分组。 ((...)
是捕获)。
如果您从 STDIN 读取,请不要忘记使用 chomp
清除最后的换行符,或者使用 $
而不是 \z
以允许结尾换行符.
比赛将在 $&
.
if ( "S10101010" =~ /^S(?:10)+\z/ ) {
say $&; # S10101010
}
您也可以使用捕获。
if ( my ($match) = "S10101010" =~ /^ ( S(?:10)+ ) \z/x ) {
say $match; # S10101010
}
(也使用 /x
允许的空格。)
当然,由于您要匹配整个字符串,您也可以只打印输入,如以下完整示例所示:
use 5.014;
use warnings;
defined( my $s = <> )
or die("Premature EOF\n");
chomp($s);
if ( $s =~ /^S(?:10)+\z/ ) {
say $s;
} else {
say "[no match]";
}