一个perl的匹配,搞了半天,没搞定。。

一个perl的匹配,搞了半天,没搞定。。

$a="/";
$b="/a";
$c="/a/";
$d="/a/b";
$e="/a/b/";
$f="/a/b/c";
....

有这些格式的字符串,
像$a,$b就返回空
其他的就发挥a(第一个/和第二个/之间的)
有简洁的语句能做到吗?
按 / 分割,然后在 field 的个数 >= 2 的时候返回第一个 field 的值
发挥?返回?
print $1 if m{/(.+?)/};


QUOTE:
原帖由 ly5066113 于 2008-11-26 20:56 发表
print $1 if m{/(.+?)/};

sweet


[Copy to clipboard] [ - ]
CODE:
(split(/\//,$str))[2]

比较笨的办法 高手的不是太理解


use strict;
use warnings;

my $a=<STDIN>;

if($a=~m/\/.+\//g)
{
        my $b=(split(/\//,$a))[1];
        print $b;
}


QUOTE:
原帖由 john.daker 于 2008-11-26 20:01 发表
$a="/";
$b="/a";
$c="/a/";
$d="/a/b";
$e="/a/b/";
$f="/a/b/c";
....

有这些格式的字符串,
像$a,$b就返回空
其他的就发挥a(第一个/和第二个/之间的)
有简洁的语句能做到吗?

# simple + easy for reading:
@temp = split "/",  $yourTestString;
print ($#temp > 1) ? $temp[1] : "";


QUOTE:
原帖由 ulmer 于 2008-11-27 17:43 发表

# simple + easy for reading:
@temp = split "/",  $yourTestString;
print ($#temp > 1) ? $temp[1] : "";

print +($#temp > 1) ? $temp[1] : "";


QUOTE:
原帖由 ynchnluiti 于 2008-11-27 17:54 发表

print +($#temp > 1) ? $temp[1] : "";

我更倾向于

[Copy to clipboard] [ - ]
CODE:
print(($#temp > 1) ? $temp[1] : "");

这种写法