/^FOO.*R$/
Ruby用//將正則表達式括起來。^表示開頭,$表示結尾,.*表示0個以上的任意字符。
現在就講講正則表達式的規則的寫法。正則表達式中有很多上述的具有特別意義的字符。首先是下列字符。
例如,“^f[a-z]+”表示“第一個字符是f,后面是若干個從a到z之間的字符”,可以是“fobar”或“fool”等等。這種表達法就是正 則表達式(regular expression)。在搜索字符串時正則表達式非常有用,因此在UNIX的世界里,正則表達式得到了廣泛的應用。grep程序就是個代表。許多人是不 是經常會用到它呢?
為了學會使用正則表達式,先來試試下面這個程序。請用文件名regx.rb將程序保存下來以后再運行它。
st = "\033[7m"
en = "\033[m"
while TRUE
print "str> "
STDOUT.flush
str = gets
break if not str
str.chop!
print "pat> "
STDOUT.flush
re = gets
break if not re
re.chop!
str.gsub! /#{re}/, "#{st}\\&#{en}"
print str, "\n"
end
print "\n"
該程序會在第一次輸入的字符串中按照第二次輸入的正則表達式的要求尋找合適的字符串,并將其以反色顯示出來。下面是運行結果。
str> foobar
pat> ^fo+
foobar
^^^
# 實際上foo的部分被反色顯示了。
再試一試。
str> abc012dbcd555
pat> \\d
abc012dbcd555
~~~ ~~~
從上例可以看出,該程序可以檢測出多處符合條件的字符串。
str> foozboozer
pat> f.*z
foozboozer
~~~~~~~~
在這個例子中,正則表達式“f.*z”并非只是對應到fooz,而是一直對應到foozbooz這里。這是因為,正則表達式總是在符合條件的結果中選擇較長的一個。
正則表達式甚至可以寫出讓人一眼看不透的模式,這可能會像謎語一樣有趣。但若過分凝煉的話,以后就很難搞懂當初的想法了。
str> Wed Feb 7 08:58:04 JST 1996
pat> [0-9]+:[0-9]+(:[0-9]+)?
Wed Feb 7 08:58:04 JST 1996
~~~~~~~~
Ruby用’/’將正則表達式括起來。另外還有一些方法會自動將字符串變為正則表達式。
% ruby -le 'print "abcdef" =~ /d/'
3
% ruby -le 'print "aaaaaa" =~ /d/'
nil
‘=~’是使用正則表達式進行匹配的操作符,它返回匹配成功時的位置。
到底哪些方法可以處理正則表達式呢?關于這個問題,請查閱參考手冊。