2011-06-09 101 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 

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