2012-03-20 69 views
1

我可以指定我希望前面的字符是(NOT A DIGIT)還是(BEGINNING ANCHOR)?是否可以在正則表達式中指定(錨定或匹配)

我在找「1/2」,但我想忽略像21/22這樣的情況。我知道我可以排除這樣的前或後的數字:

/([^0-9])1\/2([^0-9])/ 

但是當比賽發生在該行的開頭或結尾失敗。是否允許在分組子句中使用^和&?

+0

您是否曾嘗試在分組子句中使用^或$? – octern 2012-03-20 18:49:12

回答

1

如果你也想喜歡a1/2匹配的東西,你可以用一個negative lookbehind(前提是你的正則表達式實現支持它):

irb(main):015:0> 'a1/2' =~ /(?<!\d)1\/2/ 
=> 1 
irb(main):016:0> '11/2' =~ /(?<!\d)1\/2/ 
=> nil 

這是「字符串1/2,而不是由一個數字之前」。

如果您不能使用回顧後,你幾乎可以從字面上轉移你的要求到像/([^\d]|^)(1\/2)/一個正則表達式,這是「一個字符不是一個數字或詞組的開頭,後跟字符串1/2(第二捕獲組)」。

+0

我不能使用向後看。但我看到你的回答是 /([^ \ d] | ^)(1 \/2)/ 所以是的,那就是我一直在尋找的東西。我不知道錨是否可以用於這樣的小組。我確實嘗試過(我使用PHP),它確實有效。謝謝! – 2012-03-20 19:10:33

+0

@MM:順便說一下,正則表達式函數的'preg_'系列應該支持lookbehind。 – 2012-03-20 19:13:37

0

一個解決方案,對我的作品是

([^0-9-]1\/2)|(^1\/2) 

可能有其他的更優雅的選擇,可能使用回顧後。