位置:海鸟网 > IT > JavaScript >

正则表达式——极速入门

正则表达式:

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

正则表达式中常用的标记

01 ^    |   行或字符串开头

02 $    |   行或字符串末尾

03 .    |   除换行符外的字符

04 \w   |   单词字符 (数字、字母或下划线)

05 \W   |   非单词字符

06 \d   |   数字(等同于【0-9】)

07 \D   |   非空白字符

08   

09 \A   |   字符串开头

10 \Z   |   字符串末尾或最后的换行符钱

11 \z   |   字符串末尾

12   

13 \s   |   空白字符

14 \S   |   非空白字符

15   

16 \b   |   单词边界(【】外)

17 \B   |   非单词边界

18 \b   |   退格(在【】内)

19 []   |   集合中的任何一个字符,中间使用连字符,则表示范围,如:[0-9],[a-z]

20 ?    |   0或1个之前的表达式

21 |    |   或

22 ( ) |   子表达式编组

23   

24 *    |   零或多个之前的表达式

25 *?   |   零或多个之前的表达式(非贪婪)

26 +    |   1个或多个之前的表达式

27 +?   |   1个或多个之前的表达式(非贪婪)

28 {m,n}|   m-n个之前的表达式

29 {m,n}? | m-n个之前的表达式(非贪婪的)

30   

31 还有{?=} {?!} (?>) (?#) (?imx-imx)等

32   

33 如何使用这些标记呢?请看下面的具体实例

最基本的实例:

01 #匹配整个字符串

02 puts /ruby/ =~ "ruby"   # 0

03 puts /ruby/ =~ "Ruby"   # nil

04   

05 #匹配行或字符串开头与结尾

06 str = "abcdef"

07 puts str

08 puts /^abc/ =~ str   # 0

09 puts /def$/ =~ str   # 3

10   

11 str = "abc\ndef\n"

12 puts /^abc/ =~ str   # 0

13 puts /def$/ =~ str   # 4

14 puts /abc/ =~ str    # 0

15 puts /def/ =~ str    # 4

16   

17 #匹配字符串本身的开头和结尾

18 str = "abc\ndef\n"

19 puts /\Aabc/ =~ str    # 0

20 puts /def\Z/ =~ str    # 4

21 puts /def\z/ =~ str    # nil

22   

23 #匹配单词字符

24 puts "匹配单词字符"

25 pattern = /\w/

26 puts pattern =~ "abc"  # 0

27 puts pattern =~ "."    # nil

28   

29 #匹配整数

30 # \d 数字

31 # \D 非数字

32 puts "匹配数字"

33 puts /\d/ =~ "122"   #0

34 puts /\D/ =~ "122"   #nil

35 puts /\D/ =~ "abc"   #0

36   

37   

38 #边界

39 str = "This is your friend!"

40 puts str

41 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!-

限定符实例

01 # 限定符

02 # * 指定零个或更多个匹配;例如 \w* 或 (abc)*。与 {0,} 相同

03 # + 指定一个或多个匹配;例如 \w+ 或 (abc)+。与 {1,} 相同

04 # ? 指定零个或一个匹配;例如 \w? 或 (abc)?。与 {0,1} 相同

05   

06 # {n} 指定恰好 n 个匹配;例如 (pizza){2}

07 # {n,} 指定至少 n 个匹配;例如 (abc){2,}

08 # {n,m} 指定至少 n 个但不多于 m 个匹配。

09   

10 # *? 指定尽可能少地使用重复的第一个匹配 (lazy *)

11 # +? 指定尽可能少地使用重复但至少使用一次 (lazy +)

12   

13 # ?? 指定使用零次重复(如有可能)或一次重复 (lazy ?)

14   

15 # {n}? 等效于{n} (lazy {n})

16 # {n,}? 指定尽可能少地使用重复,但至少使用 n 次 (lazy {n,})

17   

18 # {n,m}? 指定介于 n 次和 m 次之间、尽可能少地使用重复 (lazy {n,m})

19   

20 puts "限定符"

21 puts "限定符:*"

22 puts /(abc)*/ =~ "a"      # 0

23 puts /(abc)*/ =~ "abc"    # 0

24   

25   

26 puts "限定符:+"

27 puts /(abc)+/ =~ "a"      # nil

28 puts /(abc)+/ =~ "abc"    # 0

29   

30 puts "限定符:?"

31 puts /(abc)?/ =~ "c"      # 0

32 puts /(abc)?/ =~ "abc"    # 0

33   

34   

35 puts "限定符: {n}"

36 puts /(abc){2}/ =~ "abc" # nil

37 puts /(abc){2}/ =~ "abcabc" # 0

38   

39 puts "限定符: {n,}"

40 puts /(abc){2,}/ =~ "abc" # nil

41 puts /(abc){2,}/ =~ "abcabc" # 0

42   

43 puts "限定符: {n,m}"

44 puts /(abc){2,3}/ =~ "abc" # nil

45 puts /(abc){2,3}/ =~ "abcabcabc" # 0

46   

47 puts "限定符: *?"

48 puts /(abc)*?/ =~ "a"      # 0

49 puts /(abc)*?/ =~ "abcabc" # 0

50   

51 puts "限定符: +?"

52 puts /(abc)+?/ =~ "a"      # nil

53 puts /(abc)+?/ =~ "abcabc" # 0

54   

55 puts "限定符: ??"

56 puts /(abc)??/ =~ "a"      # 0

57 puts /(abc)??/ =~ "abcabc" # 0

58   

59   

60 #匹配, {1} {3}

61 # {3}能匹配,那{1}肯定能匹配,反过来不成立

62 # 匹配范围:{1} > {3}

常用实例:

01 puts "例子"

02 #匹配电话号码:

03 #一般中国的电话号码为7-8位,区号3-4位整数,区号第一位是0,中间用分隔符‘-’

04 #注意首尾限制符

05 pattern = /^0\d{2,3}-\d{7,8}$/

06 puts pattern =~ "010-82809999"   # 0

07 puts pattern =~ "00010-82809999" # nil

08   

09 #匹配手机号码

10 # 1开头,第二位为3、5、8,11位数字

11 pattern = /^1[3,5,8]\d{9}$/

12 puts pattern =~ "15810990001"  #0

13   

14 #身份证号码

15 pattern = /\d{18}|d{15}/

16   

17 #匹配IP

18 #四组不大于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"    # 0

24 puts pattern =~ "254.255.255.255"

25   

26 #匹配电子邮箱

27 pattern = /^\w+@\w+.\w+$/         #这个没有 ‘-’

28 pattern = /^[\w-]+@[\w-]+.[\w-]+$/

29 puts pattern =~ "abc@gmail.com"  #0

30   

31 # 匹配url

32 #

33 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 =~ "?uid=123"  #0