2011-06-09 103 views
0

我想寫一個正則表達式來匹配之前的第一個屬性:和!所以無論是PASS跳過或失敗正則表達式匹配除了兩個字符

PASS : test::subtest() message 
SKIP : test::subtest2() message 
FAIL! : test::subtest3() message 

下面的正則表達式的工作

([^:]*) 

,但它也匹配了!與失敗!

所以,我想

([^:!]*) 

,但不工作不匹配失敗!在所有。

編輯 對不起調試錯誤的事情,我們需要看看完整的regex

if($line =~ m/([^:!]+):\s?([^:]*)::([^(]*)(\([^\)]*\))(.*)/) 
+0

工作對我來說,你可以發佈一個完整的例子嗎? – sverre 2011-06-09 19:54:26

回答

5

你可以提供更多的代碼?它爲我的作品:

[email protected] ~ $ perl -e 'print "FAIL! : blabla" =~ /^([^:!]+)/ ? "yes: $1" : "no","\n"' 

yes: FAIL 
+0

嘿,對不起,我意識到這是因爲我使用了一個更長的正則表達式來影響匹配。我需要在這場比賽之後解決我現在只會匹配一個:在我需要包含之後!有時候我該怎麼做? – user391986 2011-06-09 19:58:25

+0

在零件正則表達式後添加[:!],例如如下所示:/ ^([^ :!] +)\ s * [:!] / – ckruse 2011-06-09 20:04:07

0

看看這可以幫助你

([^:!]\w+) 
1

如果你知道這是在你要找的是什麼那麼這應該工作:

^([^:!]+)[:!] 
0

我猜你想要的東西,如:

/([^:!\s]+)!? \s* : \s* ([^:\s]*) :: ([^(]*)(\([^\)]*\))(.*)/x 

我所做的基本上是添加!?([^:!]*)