前两天转了一篇正则表达式实例的文章,内容不是太复杂,不过在自己再想继续深入时,
却发现它也不是我想的那么简单,决心努力好好学习学习,这不,花费上午的时间学习
了正则表达式,并写下了这篇初级的入门总结,给和我一个水平的朋友参考。
下一步还会有一个深入,等我学好了,再继续发上来,呵呵。
正则表达式概述
在编写处理字符串的程序或网页时,常会有查找符合某些复杂规则的字符串的需要。
而正则表达式就是用于描述这些规则的工具,正则直接量也被定义为包含在一对斜线(/)
间的字符,它是记录文本规则的一类代码。
它主要是用于文本匹配,所以我们不得不提到字符串的搜索/查找,因为正则表达式
就是在给定的字符串中,寻找与之匹配的部分,匹配在这里有三层意思:一种是一个字符
串匹配一个表达式;一种是在字符串李匹配正则表达式,最后一种是字符串中满足给定的
正则表达式的一部分。
正则表达式
特殊字符
在正则表达式中,下面的这些符号:
^ $ . * ? | / [] {}
都具有特殊的含义,在写正则表达式时尤其要注意,若想在表达式中直接使用它们,则必
须在其前面加上/,以表示转义,如//, /:
首先在这里说明它们各自的作用:
^ 是匹配字符串的开始,如[^/x00-/xff] (匹配双字节字符,包括汉字在内)
$ 是匹配字符串的结尾,如
^[a-zA-Z][a-zA-Z0-9_]{4,15}$ (匹配合法的帐号:子母开头,5-15位,允许子母数字下划线)
. 可以匹配除换行符以外的任意字符
* 重复0次或者多次
? 重复0次或一次
+ 重复1次或多次
| 起或的功能,即匹配两个表达式中的任意一个,如/d{15}|/d{18} (匹配15或18位的身份证)
/ 转义字符,用于转义上面的特殊字符
[] 匹配[]中的任意字符,如[aeiou] (匹配任何一个英文<F12>元音子母),还可以定义否定的
字符类,用于匹配不包含在[]内的所有字符,如[^0-9]匹配的是除数字之外的所有字符。
{} 有三种用法:{n} 重复n次;{n,} 重复n次或更多次;{n,m} 重复n到m次,如
13/d{9} 中国的手机号
元字符
说明:几乎所有的语言都有正则表达式,但其规则却不一定都相同,在我看的资料中,关于
元字符的解释就不尽相同,有的解释是: /w的匹配为任何ASCII单字字符,等价于[a-zA-Z0-9],
而在另外则为匹配字符数字或下划线或汉字,因此大家在编写正则表达式时一定要作好测试,
看到底是如何匹配的,以免造成错误.
/w 匹配字符或数字或下划线或汉字,等价于 [a-zA-Z0-9/u4e00-/u9fa5]
/s 匹配任意的空白符
/d 匹配任意数字,等价于 [0-9]
/b 匹配单词的开始或结束,即一个词语的边界,位于/w和/W之间的位置� ^及$和/b有些类似
,都是匹配的位置,比如要求输入的QQ号必须为5到12位,则可以这样写: ^/d{5,12}$
反义
/W 匹配任意不是子母,数字,下划线或汉字的字符
/S 匹配任意不是空白符的字符
/D 匹配任意非数字的字符
/B 匹配不是单词开头或结束的位置,即一个词语的边界,位于/w和/W之间的位置
例如: /S+ 匹配不包含空白符的字符串 <a[^>]+> 匹配用尖括号括起来的以a开头的字符串
替换
关于替换我们在前面的例子中其实也有涉及到了,一个简单最简单的: [0-9]|[a-zA-z] 匹配任意的
数字或者字母.
基础知识就到此为止,下次主要内容说明:
分组
后向引用
零宽断言
负向零宽断言
注释
贪婪与懒惰
处理选项
平衡组/递归匹配
可能都会有,也可能有一部分,看我的学习能力了,呵呵。
却发现它也不是我想的那么简单,决心努力好好学习学习,这不,花费上午的时间学习
了正则表达式,并写下了这篇初级的入门总结,给和我一个水平的朋友参考。
下一步还会有一个深入,等我学好了,再继续发上来,呵呵。
正则表达式概述
在编写处理字符串的程序或网页时,常会有查找符合某些复杂规则的字符串的需要。
而正则表达式就是用于描述这些规则的工具,正则直接量也被定义为包含在一对斜线(/)
间的字符,它是记录文本规则的一类代码。
它主要是用于文本匹配,所以我们不得不提到字符串的搜索/查找,因为正则表达式
就是在给定的字符串中,寻找与之匹配的部分,匹配在这里有三层意思:一种是一个字符
串匹配一个表达式;一种是在字符串李匹配正则表达式,最后一种是字符串中满足给定的
正则表达式的一部分。
正则表达式
特殊字符
在正则表达式中,下面的这些符号:
^ $ . * ? | / [] {}
都具有特殊的含义,在写正则表达式时尤其要注意,若想在表达式中直接使用它们,则必
须在其前面加上/,以表示转义,如//, /:
首先在这里说明它们各自的作用:
^ 是匹配字符串的开始,如[^/x00-/xff] (匹配双字节字符,包括汉字在内)
$ 是匹配字符串的结尾,如
^[a-zA-Z][a-zA-Z0-9_]{4,15}$ (匹配合法的帐号:子母开头,5-15位,允许子母数字下划线)
. 可以匹配除换行符以外的任意字符
* 重复0次或者多次
? 重复0次或一次
+ 重复1次或多次
| 起或的功能,即匹配两个表达式中的任意一个,如/d{15}|/d{18} (匹配15或18位的身份证)
/ 转义字符,用于转义上面的特殊字符
[] 匹配[]中的任意字符,如[aeiou] (匹配任何一个英文<F12>元音子母),还可以定义否定的
字符类,用于匹配不包含在[]内的所有字符,如[^0-9]匹配的是除数字之外的所有字符。
{} 有三种用法:{n} 重复n次;{n,} 重复n次或更多次;{n,m} 重复n到m次,如
13/d{9} 中国的手机号
元字符
说明:几乎所有的语言都有正则表达式,但其规则却不一定都相同,在我看的资料中,关于
元字符的解释就不尽相同,有的解释是: /w的匹配为任何ASCII单字字符,等价于[a-zA-Z0-9],
而在另外则为匹配字符数字或下划线或汉字,因此大家在编写正则表达式时一定要作好测试,
看到底是如何匹配的,以免造成错误.
/w 匹配字符或数字或下划线或汉字,等价于 [a-zA-Z0-9/u4e00-/u9fa5]
/s 匹配任意的空白符
/d 匹配任意数字,等价于 [0-9]
/b 匹配单词的开始或结束,即一个词语的边界,位于/w和/W之间的位置� ^及$和/b有些类似
,都是匹配的位置,比如要求输入的QQ号必须为5到12位,则可以这样写: ^/d{5,12}$
反义
/W 匹配任意不是子母,数字,下划线或汉字的字符
/S 匹配任意不是空白符的字符
/D 匹配任意非数字的字符
/B 匹配不是单词开头或结束的位置,即一个词语的边界,位于/w和/W之间的位置
例如: /S+ 匹配不包含空白符的字符串 <a[^>]+> 匹配用尖括号括起来的以a开头的字符串
替换
关于替换我们在前面的例子中其实也有涉及到了,一个简单最简单的: [0-9]|[a-zA-z] 匹配任意的
数字或者字母.
基础知识就到此为止,下次主要内容说明:
分组
后向引用
零宽断言
负向零宽断言
注释
贪婪与懒惰
处理选项
平衡组/递归匹配
可能都会有,也可能有一部分,看我的学习能力了,呵呵。