正则表达式——极速入门
Posted on | 一月 15, 2010 | No Comments
正则表达式:
正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。正则以其简单、实用、快速深得广大编程人员的热爱。
正则表达式中常用的标记
^ | 行或字符串开头
$ | 行或字符串末尾
. | 除换行符外的字符
\w | 单词字符 (数字、字母或下划线)
\W | 非单词字符
\d | 数字(等同于【0-9】)
\D | 非空白字符
\A | 字符串开头
\Z | 字符串末尾或最后的换行符钱
\z | 字符串末尾
\s | 空白字符
\S | 非空白字符
\b | 单词边界(【】外)
\B | 非单词边界
\b | 退格(在【】内)
[] | 集合中的任何一个字符,中间使用连字符,则表示范围,如:[0-9],[a-z]
? | 0或1个之前的表达式
| | 或
( ) | 子表达式编组
* | 零或多个之前的表达式
*? | 零或多个之前的表达式(非贪婪)
+ | 1个或多个之前的表达式
+? | 1个或多个之前的表达式(非贪婪)
{m,n}| m-n个之前的表达式
{m,n}? | m-n个之前的表达式(非贪婪的)
还有{?=} {?!} (?>) (?#) (?imx-imx)等
如何使用这些标记呢?请看下面的具体实例
最基本的实例:
#匹配整个字符串 puts /ruby/ =~ "ruby" # 0 puts /ruby/ =~ "Ruby" # nil #匹配行或字符串开头与结尾 str = "abcdef" puts str puts /^abc/ =~ str # 0 puts /def$/ =~ str # 3 str = "abc\ndef\n" puts /^abc/ =~ str # 0 puts /def$/ =~ str # 4 puts /abc/ =~ str # 0 puts /def/ =~ str # 4 #匹配字符串本身的开头和结尾 str = "abc\ndef\n" puts /\Aabc/ =~ str # 0 puts /def\Z/ =~ str # 4 puts /def\z/ =~ str # nil #匹配单词字符 puts "匹配单词字符" pattern = /\w/ puts pattern =~ "abc" # 0 puts pattern =~ "." # nil #匹配整数 # \d 数字 # \D 非数字 puts "匹配数字" puts /\d/ =~ "122" #0 puts /\D/ =~ "122" #nil puts /\D/ =~ "abc" #0 #边界 str = "This is your friend!" puts str puts str.gsub(/\b/,"|") # |This| |is| |your| |friend|! puts str.gsub(/\B/,"-") # T-h-i-s i-s y-o-u-r f-r-i-e-n-d!-
限定符实例
# 限定符
# * 指定零个或更多个匹配;例如 \w* 或 (abc)*。与 {0,} 相同
# + 指定一个或多个匹配;例如 \w+ 或 (abc)+。与 {1,} 相同
# ? 指定零个或一个匹配;例如 \w? 或 (abc)?。与 {0,1} 相同
# {n} 指定恰好 n 个匹配;例如 (pizza){2}
# {n,} 指定至少 n 个匹配;例如 (abc){2,}
# {n,m} 指定至少 n 个但不多于 m 个匹配。
# *? 指定尽可能少地使用重复的第一个匹配 (lazy *)
# +? 指定尽可能少地使用重复但至少使用一次 (lazy +)
# ?? 指定使用零次重复(如有可能)或一次重复 (lazy ?)
# {n}? 等效于{n} (lazy {n})
# {n,}? 指定尽可能少地使用重复,但至少使用 n 次 (lazy {n,})
# {n,m}? 指定介于 n 次和 m 次之间、尽可能少地使用重复 (lazy {n,m})
puts "限定符"
puts "限定符:*"
puts /(abc)*/ =~ "a" # 0
puts /(abc)*/ =~ "abc" # 0
puts "限定符:+"
puts /(abc)+/ =~ "a" # nil
puts /(abc)+/ =~ "abc" # 0
puts "限定符:?"
puts /(abc)?/ =~ "c" # 0
puts /(abc)?/ =~ "abc" # 0
puts "限定符: {n}"
puts /(abc){2}/ =~ "abc" # nil
puts /(abc){2}/ =~ "abcabc" # 0
puts "限定符: {n,}"
puts /(abc){2,}/ =~ "abc" # nil
puts /(abc){2,}/ =~ "abcabc" # 0
puts "限定符: {n,m}"
puts /(abc){2,3}/ =~ "abc" # nil
puts /(abc){2,3}/ =~ "abcabcabc" # 0
puts "限定符: *?"
puts /(abc)*?/ =~ "a" # 0
puts /(abc)*?/ =~ "abcabc" # 0
puts "限定符: +?"
puts /(abc)+?/ =~ "a" # nil
puts /(abc)+?/ =~ "abcabc" # 0
puts "限定符: ??"
puts /(abc)??/ =~ "a" # 0
puts /(abc)??/ =~ "abcabc" # 0
#匹配, {1} {3}
# {3}能匹配,那{1}肯定能匹配,反过来不成立
# 匹配范围:{1} > {3}
常用实例:
puts "例子"
#匹配电话号码:
#一般中国的电话号码为7-8位,区号3-4位整数,区号第一位是0,中间用分隔符‘-’
#注意首尾限制符
pattern = /^0\d{2,3}-\d{7,8}$/
puts pattern =~ "010-82809999" # 0
puts pattern =~ "00010-82809999" # nil
#匹配手机号码
# 1开头,第二位为3、5、8,11位数字
pattern = /^1[3,5,8]\d{9}$/
puts pattern =~ "15810990001" #0
#身份证号码
pattern = /\d{18}|d{15}/
#匹配IP
#四组不大于255的整数组成,中间用'.'分隔
puts "IP"
num = /^\d|[01]?\d{1,2}|2[0-4]\d|25[0-5]/
pattern = /^(#{num}\.){3}#{num}$/
#一个整体:pattern = /^(^\d|[01]?\d{1,2}|2[0-4]\d|25[0-5]\.){3}^\d|[01]?\d{1,2}|2[0-4]\d|25[0-5]$/
puts pattern =~ "127.0.0.1" # 0
puts pattern =~ "254.255.255.255"
#匹配电子邮箱
pattern = /^\w+@\w+.\w+$/ #这个没有 ‘-’
pattern = /^[\w-]+@[\w-]+.[\w-]+$/
puts pattern =~ "abc@gmail.com" #0
# 匹配url
# http://www.google.cn
pattern = /(http|https|ftp):(\/\/|\\\\)((\w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(((\/[\~]*|\\[\~]*)
(\w)+)|[.](\w)+)*(((([?](\w)+){1}[=]*))*((\w)+){1}([\&](\w)+[\=](\w)+)*)*/
puts pattern =~ "http://www.google.cn?uid=123" #0
评论|Comments
留言|Leave a Reply
![如果您自认为是一位忠实的Silverlight-Fans,那么请将此标志放到您的博客中成为一名真正的[银光使者]](http://images.cnblogs.com/cnblogs_com/alamiye010/Silverlighter1.jpg)