perl正则表达式子串

时间:2017-06-01 07:48:50

标签: regex perl

$str="!bypass";

我需要一个仅以正则表达式开头的返回字符串"!" 我怎样才能返回旁路?

2 个答案:

答案 0 :(得分:3)

要匹配以!开头的字符串,您需要此模式。 ^是字符串开头的锚点。

/^!/

如果你想捕捉!之后的东西,你需要这种模式。括号()捕获组。他们告诉Perl抓住他们之间的所有东西并保留它。 .表示任何字符+的量词,尽可能多,。所以.+表示抓住所有内容

/^!(.+)/

要应用它,请执行此操作。

$str =~ m/^!(.+)/;

要从该模式中获取"bypass",请使用由Perl自动分配的$1匹配变量和m//操作。

print $1; # will print bypass

要做出有条件的,那就是:

print $1 if $str =~ m/^!(.+)/;

这里的if位于post-fix notation,可以省略块和括号。它与以下内容相同,但单个语句的读取时间更短,更容易阅读。

if ( $str =~ m/^!(.+)/ ) {
    print $1;
}

如果您想永久更改$str以在开头没有感叹号,则需要使用替换。

$str =~ s/^!//;

s///是替换运算符。它会更改$str。包含!的原始值将丢失。

答案 1 :(得分:1)

使用^!\K.+

它的工作原理如下:

  • ^! - 匹配初始!(但这很快就会改变,见下文)。
  • \K - 保持 - “忘记”目前为止匹配的内容,并在此处设置匹配的起点(!之后)。
  • .+ - 匹配非空的字符序列。

由于\K,只有最后一部分(.+)实际匹配。