我正在尝试编写一个正则表达式模式,该模式在第一次出现的字符之间抓取字符串,以“/”开头,并且可能以“/”或“//”结尾或无结尾。例如 -
/test1/code1
/test/code1/code2
/test/code1//code2
以上所有内容都应返回code1。
我试过跟随正则表达式 -
\/+.*?(\/|\/\/)(.*)
然而,这仅在test1 /之后停止并返回所有内容。 ie / code1 // code2。
关于我如何确保查找是以/开头和以/或//结尾的任何建议?
答案 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