正则表达式学习之一:基本语法

准备把这篇文章 翻译一下,学习一下正则表达式的基本语法。看的头大了,这玩意用的时候还是要边查边写的好。

----------------------------------------

简介

正则表达式是为了描述一个字符串的某个特征,然后用它来匹配另外一个字符串。举个例子,模式“ ab+”意味着“一个 ’a’”和至少一个 ’b’,所以 ”ab”,”abb”, abbbbbbb”都跟这个模式匹配。

正则表达式用于: (1) 判断一个字符串是否跟一个模式匹配,譬如电邮地址; (2)在整个文本中找到符合给定模式的子字符串; (3) 对一段文本做复杂的替换操作

正则表达式的语法学习非常简单,一些抽象概念也很容易理解。许多相关文章没有将正则表达式的概念从简单到抽象一步步介绍,所以很多人觉得学习起来很困难。另一方面,每个正则表达式引擎都会描述它独特的功能,而这部分独特功能却不是我们最初应该学习的。

1.       正则表达式基本语法

1.1          一般字符

字母、数字、下划线、无特殊定义的标点就是“一般字符”。当正则表达式与一个字符串匹配时,一个一般字符跟相同的字符匹配。

例子 1:当模式 ”c”与字符串 ”abcde”测试匹配时,匹配结果:成功,子串匹配 ”c”

例子 2:当模式“ bcd”与字符串“ abcde”测试匹配时,匹配结果:成功,匹配字串 ”bcd”

1.2          简单转义字符

我们知道的非打印字符:

表达式

匹配

/r, /n

回车,换行符

/t

Tab

//

“/”

在正则表达式语法中有特殊定义的一些标点符号。为了匹配这些字符,需要在模式中加入 ”/”。举个例子 :^, $有特殊定义,所以我们需要用 ”/^” ”/$”来匹配它们。

表达式

匹配

/^

“^”

/$

“$”

/.

“.”

转义字符的匹配效果跟一般字符一样,也是匹配它们自身字符。

例如:模式 ”/$d”匹配字符串 ”abc$de”

1.3          匹配字符集中任意字符的表达式

一些表达式能匹配字符集中的任意字符。比如 ”/d”就能匹配任意的数字。每个这样的表达式每次只能匹配一个,虽然它们能匹配一组字符中的任意字符。

表达式

匹配

/d

任意数字, 0~9

/w

任意字母,数字,下划线 A~Z, a~z, 0~9, _

/s

空格, tab,换行,回车,换页符中的任意一个

.

除了换行符 (/n)之外的任意字符

例如:模式 ”a.d”匹配 ”aaa100”,匹配成功,匹配字串 ”aa1”

1.4          用于匹配许多字符集中的任意一个字符的自定义表达式

使用方括号 ([ ])的表达式表达式可以包含一系列的字符,它能匹配任意的一个。使用 [ ^ ]包含一系列的字符,它能匹配除开所包含的字符集外的字符。

表达式

匹配

[ab5@]

“a” “b” “5” “@”

[^abc]

匹配除了 ”a” “b” “c”其余的字符

[f-k]

“f” “k”之间的字符

[^A-F0-3]

不处于 “A”~”F”,”0”~”3”的所有字符

例如:模式 ”[bcd][bcd]”跟字符串 ”abc123” 匹配成功,匹配字串 ”bc”

例如:模式 ”[^abc]”跟字符串 ”abc123”,匹配成功,匹配子串 ”1”;

1.5          用于数量匹配的特殊表达式

前面介绍的所有表达式只能匹配一次字符。如果一个表达式后面跟随一个数字,它就能匹配多次。

例如:我们可以使用模式 ”[bcd]{2}”来代替 ”[bcd][bcd]”

表达式

匹配

{n}

匹配 n次,例如 ”/w{2}”等价于 ”/w/w”;”a{5}”等价于 ”aaaaa”

{m, n}

至少匹配 n次,但不多于 m次: ”ba{1,3}” 匹配 ”ba”, “baa”, “baaa”

{m,}

匹配至少 m次: ”/w/d{2,}” ”a12”,”_456” “M12344”..

?

匹配 1次或者 0次,等价于 {0, 1}: “a[cd]?” ”a”, “ac”, “ad”

+

匹配一次或者多次,等价于 {1,}:”a+b” ”ab”, “aab”, “aaab”

*

匹配 0次或者多次,等价于 {0,}:”/^*b” ”b”,”^^^b”…

例如:模式 ”/d+/.?/d*” ”I t costs &12.5”匹配,结果成功,匹配子串 ”12.5”;

例如:模式 ”go{2,8}gle” ”Ads by gooooogle”匹配,结果成功;匹配子串 ”gooooogle”

1.6          巨有抽象功能的特殊标点

一些标点在模式中具有特殊的功能:

表达式

匹配

^

匹配字符串的开头

$

匹配字符串的结尾

/b

匹配边界内的字符 ??

举例 1:模式 ”^aaa” 跟字符串 “xxx aaa xxx”,匹配失败。因为 ”^”必须匹配字符串的开头。

2:模式 ”aaa$”跟字符串 ”xxx aaa xxx”,匹配失败、

3:模式 ”./b.”跟字符串 ”@@@abc”,匹配成功,匹配字串 ”@a”.

                “/b”类似于 ”^” ”$”的交集,它不跟任何字符匹配,但是它要求一个 ”/w”在一边,一个非 ”/w”字符在另一边

4:模式 ”/bend/b”跟字符串 ”weekend,endfor,end”匹配,结果成功,匹配子串 ”end”,开始位置 15,结束位置 18   ??

一些特殊标点能嵌套在其他子模式中起作用:

模式

匹配

|

二选一,左匹配或者右匹配

( )

(1)    当子模式

(2)    子模式匹配结果能单独检索

: 当模式 ”Tom|Jack”匹配字符串 ”I’m Tom, he is Jace”,匹配成功,子串 ”Tom”开始位置 4,结束位置 7; 当匹配下一个时,匹配成功,子串 ”Jack”,开始位置 15,结束位置 19

例:当模式 ”(go/s*)+”匹配字符串 ”Let’s go go go!”,匹配成功;子串 ”go go go”:开始位置 6,结束位置 14

例:当模式 ”¥ (/d+/.?/d*)”与字符串 ”$10.9, ¥20.5 ”匹配,匹配成功;子串 ” ¥20.5 ”:位置开始 6,结束 10。子模式 ”()”的匹配记过是 ”20.5”

 

下一篇将是一些常规表达式中的高级语法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值