分享
 
 
 

正则表达式——极速入门

王朝学院·作者佚名  2010-01-16
窄屏简体版  字體: |||超大  

正则表达式:

正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。正则以其简单、实用、快速深得广大编程人员的热爱。

编写正则一些思维:

1、首先,确定规则。你需要匹配一个什么样字符串,它有哪几部分构成,它有哪些特征。

2、提出最小单位。有的时候,一些匹配规则是重复的,我们可以试着找到共同点,规划为一条规则。

3、根据其规则、最小单位,逐一写出正则

4、将这些单位正则组合统一,构成你想要的完整正则。

在这里我们就需要了解一些基本的标记和用法,任何的规则都是用基本标记组合而成的。而正则的标记也很简单,大家不妨了解一下。

正则表达式中常用的标记

1 正则表达式中常用的标记 2 ^ | 行或字符串开头 3 $ | 行或字符串末尾 4 . | 除换行符外的字符 5 \w | 单词字符 (数字、字母或下划线) 6 \W | 非单词字符 7 \d | 数字(等同于【0-9】) 8 \D | 非空白字符 9 10 \A | 字符串开头11 \Z | 字符串末尾或最后的换行符钱12 \z | 字符串末尾13 14 \s | 空白字符15 \S | 非空白字符16 17 \b | 单词边界(【】外)18 \B | 非单词边界19 \b | 退格(在【】内)20 [] | 集合中的任何一个字符,中间使用连字符,则表示范围,如:[0-9],[a-z]21 ? | 0或1个之前的表达式22 | | 或23 ( ) | 子表达式编组24 25 * | 零或多个之前的表达式26 *? | 零或多个之前的表达式(非贪婪)27 + | 1个或多个之前的表达式28 +? | 1个或多个之前的表达式(非贪婪)29 {m,n}| m-n个之前的表达式30 {m,n}? | m-n个之前的表达式(非贪婪的)31 32 33 还有{?=} {?!} (?>) (?#) (?imx-imx)等

最基本的实例:

1 #匹配整个字符串 2 puts /ruby/ =~ "ruby" # 0 3 puts /ruby/ =~ "Ruby" # nil 4 5 #匹配行或字符串开头与结尾 6 str = "abcdef" 7 puts str 8 puts /^abc/ =~ str # 0 9 puts /def$/ =~ str # 310 11 str = "abc\ndef\n"12 puts /^abc/ =~ str # 013 puts /def$/ =~ str # 414 puts /abc/ =~ str # 015 puts /def/ =~ str # 416 17 #匹配字符串本身的开头和结尾18 str = "abc\ndef\n"19 puts /\Aabc/ =~ str # 020 puts /def\Z/ =~ str # 421 puts /def\z/ =~ str # nil22 23 #匹配单词字符24 puts "匹配单词字符"25 pattern = /\w/26 puts pattern =~ "abc" # 027 puts pattern =~ "." # nil28 29 #匹配整数30 # \d 数字31 # \D 非数字32 puts "匹配数字"33 puts /\d/ =~ "122" #034 puts /\D/ =~ "122" #nil35 puts /\D/ =~ "abc" #036 37 38 #边界39 str = "This is your friend!"40 puts str41 puts str.gsub(/\b/,"|") # |This| |is| |your| |friend|!42 puts str.gsub(/\B/,"-") # T-h-i-s i-s y-o-u-r f-r-i-e-n-d!-43

限定符实例

1 puts "限定符" 2 puts "限定符:*" 3 puts /(abc)*/ =~ "a" # 0 4 puts /(abc)*/ =~ "abc" # 0 5 6 7 puts "限定符:+" 8 puts /(abc)+/ =~ "a" # nil 9 puts /(abc)+/ =~ "abc" # 010 11 puts "限定符:?"12 puts /(abc)?/ =~ "c" # 013 puts /(abc)?/ =~ "abc" # 014 15 16 puts "限定符: {n}"17 puts /(abc){2}/ =~ "abc" # nil18 puts /(abc){2}/ =~ "abcabc" # 019 20 puts "限定符: {n,}"21 puts /(abc){2,}/ =~ "abc" # nil22 puts /(abc){2,}/ =~ "abcabc" # 023 24 puts "限定符: {n,m}"25 puts /(abc){2,3}/ =~ "abc" # nil26 puts /(abc){2,3}/ =~ "abcabcabc" # 027 28 puts "限定符: *?"29 puts /(abc)*?/ =~ "a" # 030 puts /(abc)*?/ =~ "abcabc" # 031 32 puts "限定符: +?"33 puts /(abc)+?/ =~ "a" # nil34 puts /(abc)+?/ =~ "abcabc" # 035 36 puts "限定符: ??"37 puts /(abc)??/ =~ "a" # 038 puts /(abc)??/ =~ "abcabc" # 039 40 41 #匹配, {1} {3}42 # {3}能匹配,那{1}肯定能匹配,反过来不成立43 # 匹配范围:{1} > {3}

常用实例:

1 puts "例子" 2 #匹配电话号码: 3 #一般中国的电话号码为7-8位,区号3-4位整数,区号第一位是0,中间用分隔符‘-’ 4 #注意首尾限制符 5 pattern = /^0\d{2,3}-\d{7,8}$/ 6 puts pattern =~ "010-82809999" # 0 7 puts pattern =~ "00010-82809999" # nil 8 9 #匹配手机号码10 # 1开头,第二位为3、5、8,11位数字11 pattern = /^1[3,5,8]\d{9}$/12 puts pattern =~ "15810990001" #013 14 #身份证号码15 pattern = /\d{18}|d{15}/16 17 #匹配IP18 #四组不大于255的整数组成,中间用'.'分隔19 puts "IP"20 num = /^\d|[01]?\d{1,2}|2[0-4]\d|25[0-5]/21 pattern = /^(#{num}\.){3}#{num}$/22 #一个整体: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]$/23 puts pattern =~ "127.0.0.1" # 024 puts pattern =~ "254.255.255.255"25 26 #匹配电子邮箱27 pattern = /^\w+@\w+.\w+$/ #这个没有 ‘-’28 pattern = /^[\w-]+@[\w-]+.[\w-]+$/29 puts pattern =~ "abc@gmail.com" #030 31 # 匹配url32 # http://www.google.cn33 pattern = /(http|https|ftp):(\/\/|\\\\)((\w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(((\/[\~]*|\\[\~]*)34 (\w)+)|[.](\w)+)*(((([?](\w)+){1}[=]*))*((\w)+){1}([\&](\w)+[\=](\w)+)*)*/35 36 puts pattern =~ "http://www.google.cn?uid=123" #0

其它

贪婪的意义

1 puts "贪婪的" 2 #贪婪的,就是匹配尽可能长的字符串 3 # '.' 含义:除换行符外的字符 4 str = "where the sea meets the moon-blanch'd land" 5 puts str 6 match = /.*the/.match(str) 7 puts match[0] # where the sea meets the,*是贪婪的。如果不想贪婪就在其后加+ '?' 8 #*?非贪婪 9 match = /.*?the/.match(str)10 puts match[0] # where the11 12 str.insert(0,"Hello \n")13 match = /.*?the/.match(str)14 puts match[0] #where the

正负预查

1 #正负预查 2 puts "正负预查" 3 s1 = "New World Dictionary" 4 s2 = "New World Symphony" 5 s3 = "New World Order" 6 7 reg = /New World (?=Dictionary|Symphony)/ 8 m1 = reg.match(s1) 9 puts m1.to_a[0] # "New World"10 m2 = reg.match(s2)11 puts m2.to_a[0] # "New World"12 puts reg.match(s3) # nil13 14 puts "负预查"15 16 reg = /New World (?!Symphony)/ # "New World "后面没有“Symphony”17 puts reg.match(s1).to_a[0] # "New World"18 puts reg.match(s2).to_a[0] # nil19 puts reg.match(s3).to_a[0] # "New World"

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有