求教:perl获取匹配字符串的问题

UnixZC
求教:perl获取匹配字符串的问题

比如字符串是/c/prog/d/s3.exe /t
现在我想获取s3.exe或者s3然后返回给一个变量,怎样用模式匹配做呢?
s3不是固定的,可能是wx,也可能是其他的字符串。
--------------------------------------------------------------
还是C快,perl还不会呀。:mrgreen:

converse
[code]
$text = "/c/prog/d/s3.exe /t";

@array = split////, $text;
foreach (@array)
{
    if (/exe/)
    {
        print $_, "/n";
        last;
    }
}
[/code]

mouse.rice
正则表达式可以解决!
--------LZ应该分我10分:mrgreen: :mrgreen:

UnixZC
[quote]原帖由 [i]mouse.rice[/i] 于 2008-7-2 14:57 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8719625&ptid=1186652][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
正则表达式可以解决!
--------LZ应该分我10分:mrgreen: :mrgreen: [/quote]
我也知道模式匹配可以,你告诉我怎么做呀?写出来只要OK就给分

converse
[code]
$text = "/c/prog/d/s3.exe /t";

@array = split////, $text;
print $array[4], "/n";
[/code]

perl 上面这个文件.

UnixZC
[quote]原帖由 [i]converse[/i] 于 2008-7-2 15:24 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8720012&ptid=1186652][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]

$text = "/c/prog/d/s3.exe /t";

@array = split////, $text;
print $array[4], "/n";


perl 上面这个文件. [/quote]
对不起,路径长度不定,因此我不知道s3.exe一定是在第4的位置。还有其他方法吗?
要是C,我xxxx一分钟内搞定它。:mrgreen:
你倒是给了我一个提示,split然后查找每一个数组元素,直到第一次出现.exe的那个就是我想要的。
貌似可以,不过我想更简单点或者更快点的方法。

converse
回复 #5 UnixZC 的帖子

老大 麻烦您把问题描述清楚行吗?
:outu: :outu: :outu:

UnixZC
[quote]原帖由 [i]converse[/i] 于 2008-7-2 16:06 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8720518&ptid=1186652][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
老大 麻烦您把问题描述清楚行吗?
:outu: :outu: :outu: [/quote]
先给你10分,我已经用你提示的那种方法先搞定了,然后等等有没有更好的方法。:mrgreen:

mouse.rice
[quote]原帖由 [i]UnixZC[/i] 于 2008-7-2 15:52 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8720366&ptid=1186652][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]

对不起,路径长度不定,因此我不知道s3.exe一定是在第4的位置。还有其他方法吗?
要是C,我xxxx一分钟内搞定它。:mrgreen:
你倒是给了我一个提示,split然后查找每一个数组元素,直到第一次出现.exe的那个就 ... [/quote]


[color=Red][b]学FLW:LZ是临时用户?[/b][/color]
就按上面converse老大讲的方法做:
[table=95%][tr][td][font=FixedSys][color=#000000][color=#0000FF]my[/color] [color=#0000FF]$[/color][color=#008080]str[/color][color=#0000CC]=[/color][color=#FF00FF]"/c/prog/d/s3.exe /t"[/color][color=#0000CC];[/color]
[color=#0000FF]my[/color] [color=#0000FF]@[/color][color=#808000]lines[/color] [color=#0000CC]=[/color] [color=#FF0000]split[/color] [color=#0000CC]/[/color][color=#0000CC]/[/color][color=#0000CC]/[/color][color=#0000CC]/[/color][color=#0000CC],[/color][color=#0000FF]$[/color][color=#008080]str[/color][color=#0000CC];[/color]
[color=#0000FF]for[/color] [color=#0000CC]([/color][color=#0000FF]@[/color][color=#808000]lines[/color][color=#0000CC])[/color][color=#0000CC]{[/color]
   [color=#FF0000]print[/color] [color=#0000FF]if[/color] [color=#0000CC]/[/color]exe[color=#0000CC]/[/color][color=#0000CC];[/color]
[color=#0000CC]}[/color][/color][/font][/td][/tr][/table]


[color=Red][b]昏,才看到2楼有答案了[/b][/color]

那就接着贴个正则方法吧:
[table=95%][tr][td][font=FixedSys][color=#000000][color=#0000FF]my[/color] [color=#0000FF]$[/color][color=#008080]str[/color][color=#0000CC]=[/color][color=#FF00FF]"/c/prog/d/s3.exe /t"[/color][color=#0000CC];[/color]
[color=#FF0000]print[/color] [color=#0000FF]$[/color][color=#008080]1[/color] [color=#0000FF]if[/color] [color=#0000FF]$[/color][color=#008080]str[/color][color=#0000CC]=[/color][color=#0000CC]~[/color][color=#0000CC]/[/color][color=#0000CC]/[/color][color=#0000CC]/[/color][color=#0000CC]([/color][color=#0000CC][[/color][color=#0000CC]^[/color][color=#0000CC]/[/color][color=#0000CC]/[/color][color=#0000CC]][/color][color=#0000CC]+[/color]exe[color=#0000CC])[/color][color=#0000CC]/[/color][color=#0000CC];[/color][/color][/font][/td][/tr][/table]

[color=Red][b]There is more than one way to do it![/b][/color]

[[i] 本帖最后由 mouse.rice 于 2008-7-2 16:45 编辑 [/i]]

Lonki
终于看到正则了.
path可能出现空格, split不保险

flw
perldoc File::Spec