正则表达式以字符开头并以任一字符结尾

时间:2017-01-05 17:06:26

标签: regex

我正在尝试编写一个正则表达式模式,该模式在第一次出现的字符之间抓取字符串,以“/”开头,并且可能以“/”或“//”结尾或无结尾。例如 -

/test1/code1
/test/code1/code2
/test/code1//code2

以上所有内容都应返回code1。

我试过跟随正则表达式 -

\/+.*?(\/|\/\/)(.*)

然而,这仅在test1 /之后停止并返回所有内容。 ie / code1 // code2。

关于我如何确保查找是以/开头和以/或//结尾的任何建议?

1 个答案:

答案 0 :(得分:1)

这个应该做的工作:

/.+?/([^/]+)(?:/|$)

结果在第1组。

<强>解释

/       : a slash
.+?     : one or more any character not greedy
/       : a slash
([^/]+) : one or more any character that is not a slash
(?:/|$) : Non capturing group either a slash or line end

以下是使用此正则表达式的perl脚本:

#!/usr/bin/perl
use Modern::Perl;
use Data::Dumper;

my $re = qr!/.+?/([^/]+)(?:/|$)!;
while(<DATA>) {
    chomp;
    say (/$re/ ? "OK: \$1=$1\t $_" : "KO: $_");
}

__DATA__
/test1/code1
/test/code1/code2
/test/code1//code2

<强>输出:

OK: $1=code1     /test1/code1
OK: $1=code1     /test/code1/code2
OK: $1=code1     /test/code1//code2