2013-07-06 73 views
2

我想將下面的字符串與我的正則表達式進行比較。它似乎沒有工作。有什麼建議麼?使用日誌標題的正則表達式模式

字符串比較: 「用戶搜索remoteexec.log爲 」玩家「 @ 2時21分31秒」

這是我的Perl代碼。

my $qu_re = q{(.?) searched (.?) for "(.?)" @ (\d+):(\d+):(\d+)}; 
+0

你應該使用'qr'問詢正則表達式。你的問題也是什麼? – squiguy

+0

你想匹配/捕獲哪些部分? – hwnd

+0

@squiguy - 我的問題是如何將正則表達式與字符串進行比較。 – user2202426

回答

3

你缺乏一些量詞,+

my $qu_re = q{(.+?) searched (.+?) for "(.+?)" @ (\d+):(\d+):(\d+)}; 
       ^   ^  ^

否則,他們將只匹配0或1個字符。這應該適合你,但我寧願用一些更爲嚴格,如果你問我,但:

my $qu_re = q{(\w+) searched (\w+\.log) for "(\w+)" @ (\d{2}):(\d{2}):(\d{2})}; 

雖然這裏,我假設Userplayerremoteexec可以是字母數字和包含下劃線。 {2}接近\d表示只有2位數字。

+0

非常感謝你! – user2202426

+0

@ user2202426太棒了! :) – Jerry

1

這是一個例子:

use strict; 
use warnings; 

my $str = qq{User searched remoteexec.log for "player" @ 02:21:31}; 
my $qu_re = qr{(.+) searched (.+) for "([^"]+)" @ (\d+):(\d+):(\d+)}; 

if($str =~ m/$qu_re/) { 
    print "user: ", $1, "\n"; 
    print "what: ", $2, "\n"; 
    print "player: ", $3, "\n"; 
    print "when: ", "$4:$5:$6" , "\n"; 
} 

打印:

user: User 
what: remoteexec.log 
player: player 
when: 02:21:31