2013-10-24 156 views
0

給出一個字符串的任何號碼:Perl的正則表達式匹配不

//foo.bar/baz/123/index.html 

我想匹配巴茲後的數字,只要它不是123

//foo.bar/baz/124/index.html (WOULD MATCH) 
//foo.bar/baz/123/index.html (WOULD NOT MATCH) 

我怎麼能表達這個?我一直嘗試像這樣的東西:

/baz\/d+^(123)/index/ 

但還沒有成功。任何幫助表示讚賞!

回答

4

使用負前視來斷言在baz/之後不存在123。然後繼續搭配\d+

m~baz/(?!123\b)\d+/index~ 

在Perl中,你可以使用不同的分隔符時,你的正則表達式模式已經包含/,避免逃避它們。這裏我用~


如果串不允許被固定爲baz/123,你也可以用index()功能做到這一點:

$str = "//foo.bar/baz/124/index.html"; 
$needle = "/baz/123/"; 

if (index($str, $needle) == -1) { 
    print "Match found\n"; 
} 
+0

謝謝你羅希特,這是偉大的。這是目前正確匹配,除了它不符合//foo.bar/baz/1234/index.html,是否有一個條件,我可以添加說「只不匹配123」,以便1234匹配? – dcoffey3296

+1

@ dcoffey3296編輯正則表達式。只需要在'123'之後添加字邊界。 –

+0

'index('// foo.bar/baz/123/index.html','/ baz/123 /')== -1'是否也一樣? – Suic