正则表达式学习笔记(一)

来源:互联网 发布:千方百计软件官网 编辑:程序博客网 时间:2024/05/22 05:21

     本文是自己学习正则表达式的过程中所做的学习笔记,很多地方用语并不一定规范和标准,由于是学习正则表达式本身并没有太多的关注实现的语言所以都是一些较通用的规则,不排除有一些混乱的可能%>_<%,该笔记主要是记录一些自己的理解和一些需要着重了解和记忆的地方。

 

什么是正则表达式:

简单的来说正则表达式就是一个用来描述或者匹配一定的句法规则的字符串的描述方式,通常以字符串的形式展现。或者说正则表达式是用来记录句法规则的代码。

正则表达式主要应用于文本的处理,包括筛选,过滤,匹配等等,在各种语言,开发环境,文本编辑器里都有着广泛的应用。

 

基本语法元素:

 

\b是正则表达式的元字符(metacharacter),代表着单词的开头或结尾,也就是单词的分界处。\b可用于匹配一个位置。

例:

 假如你要找的是scu后面不远处跟着一个software,你可以用\bscu\b.*\bsoftware\b(其中*代表任意个字符)

 

\d是元字符,匹配一位数字(0,1,2,3……)

 

有些符号匹配他们自己本身比如:-

 

'\n'换行符

 

.      匹配除换行符以外的任意字符

 

\w   匹配字母或数字或下划线或汉字

 

\s    匹配任意的空白符

 

^     匹配字符串的开始

 

$     匹配字符串的结束

 

 

特殊情况

1. 字符转义

如要查找元字符本身的话,比如你查找.,或者要使用\来取消这些字符的特殊意义。因此,使用\.和\*。要查找\本身,用\\.

 

2. 重复

*     重复零次或更多次

 

+     重复一次或更多次

 

?      重复零次或一次

 

{n}  重复n次

 

{n,} 重复n次或更多次

 

{n,m}     重复n到m次

 

3. 字符类

匹配没有预定义元字符的字符集只需要在方括号里列出它们就行了,像[abcde]就可以用于匹配其中所有的字母,[.?!]可以用于匹配标点.,?和!。[0-9]等同于\d,[a-z0-9A-Z_]也完全等同于\w。

   

4. 分枝条件

正则表达式里的分枝条件指的是有几种规则,当我们想满足其中任意一种规则都希望能够匹配时,我们使用正则表达式的分支条件,具体方法是用|把不同的规则分隔开。

 

5. 分组

分组可用于重复多个字符的匹配。用小括号来指定分组,然后可以指定这个子表达式的重复次数了,也可以对子表达式进行其它一些操作

例:

(\d{1,3}\.){3}\d{1,3}可用于简单的IP地址匹配表达式。

分析:\d{1,3}匹配1到3位的数字,(\d{1,3}\.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})。但这是一个残缺的例子,它也将匹配256.300.888.999这种不可能存在的IP地址。由于正则表达式中并不提供关于数学的任何功能,所以只能使用冗长的分组,选择,字符类来描述一个正确的IP地址具体如下:

((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。

 

 

第一次的笔记就到这里,这些是最基本的原则,这些原则虽然看似很简单但是用法却非常的多样,钻研起来有相当的难度,最厚的一个例子虽然只是一个很简单的匹配,但是理解起来对于初学者也是非常的有难度。下次的笔记将继续这一话题。