我可以指定我希望前面的字符是(NOT A DIGIT)還是(BEGINNING ANCHOR)?是否可以在正則表達式中指定(錨定或匹配)
我在找「1/2」,但我想忽略像21/22這樣的情況。我知道我可以排除這樣的前或後的數字:
/([^0-9])1\/2([^0-9])/
但是當比賽發生在該行的開頭或結尾失敗。是否允許在分組子句中使用^和&?
我可以指定我希望前面的字符是(NOT A DIGIT)還是(BEGINNING ANCHOR)?是否可以在正則表達式中指定(錨定或匹配)
我在找「1/2」,但我想忽略像21/22這樣的情況。我知道我可以排除這樣的前或後的數字:
/([^0-9])1\/2([^0-9])/
但是當比賽發生在該行的開頭或結尾失敗。是否允許在分組子句中使用^和&?
如果你也想喜歡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
(第二捕獲組)」。
我不能使用向後看。但我看到你的回答是 /([^ \ d] | ^)(1 \/2)/ 所以是的,那就是我一直在尋找的東西。我不知道錨是否可以用於這樣的小組。我確實嘗試過(我使用PHP),它確實有效。謝謝! – 2012-03-20 19:10:33
@MM:順便說一下,正則表達式函數的'preg_'系列應該支持lookbehind。 – 2012-03-20 19:13:37
一個解決方案,對我的作品是
([^0-9-]1\/2)|(^1\/2)
可能有其他的更優雅的選擇,可能使用回顧後。
您是否曾嘗試在分組子句中使用^或$? – octern 2012-03-20 18:49:12