一、正则表达式口诀
正则其实也势利,削尖头来把钱揣; (指开始符号^和结尾符号$)特殊符号认不了,弄个倒杠来引路; (指\. \*等特殊符号)
倒杠后面跟小w, 数字字母来表示; (\w跟数字字母;\d跟数字)
倒杠后面跟小d, 只有数字来表示;
倒杠后面跟小a, 报警符号嘀一声;
倒杠后面跟小b, 单词分界或退格;
倒杠后面跟小t, 制表符号很明了;
倒杠后面跟小r, 回车符号知道了;
倒杠后面跟小s, 空格符号很重要;
小写跟罢跟大写,多得实在不得了;
倒杠后面跟大W, 字母数字靠边站;
倒杠后面跟大S, 空白也就靠边站;
倒杠后面跟大D, 数字从此靠边站;
倒框后面跟大B, 不含开头和结尾;
单个字符要重复,三个符号来帮忙; (* + ?)
0 星加1 到无穷,问号只管0 和1; (*表0-n;+表1-n;?表0-1次重复)
花括号里学问多,重复操作能力强; ({n} {n,} {n,m})
若要重复字符串,园括把它括起来; ((abc){3} 表示字符串“abc”重复3次 )
特殊集合自定义,中括号来帮你忙;
转义符号行不通,一个一个来排队;
实在多得排不下,横杠请来帮个忙; ([1-5])
尖头放进中括号,反义定义威力大; ([^a]指除“a”外的任意字符 )
1竖作用可不小,两边正则互替换; (键盘上与“\”是同一个键)
1竖能用很多次,复杂定义很方便;
园括号,用途多;
反向引用指定组,数字排符对应它; (“\b(\w+)\b\s+\1\b”中的数字“1”引用前面的“(\w+)”)
支持组名自定义,问号加上尖括号; (“(?<Word>\w+)”中把“\w+”定义为组,组名为“Word”)
园括号,用途多,位置指定全靠它;
问号等号字符串,定位字符串前面; (“\b\w+(?=ing\b)”定位“ing”前面的字符串)
若要定位串后面,中间插个小于号; (“(?<=\bsub)\w+\b”定位“sub”后面的字符串)
问号加个惊叹号,后面跟串字符串;
PHPer都知道, !是取反的意思;
后面不跟这一串,统统符合来报到; (“\w*d(?!og)\w*”,“dog”不符合,“do”符合)
问号小于惊叹号,后面跟串字符串;
前面不放这一串,统统符合来报到;
点号星号很贪婪,加个问号不贪婪;
加号问号有保底,至少重复一次多;
两个问号老规矩,0次1次团团转;
花括号后跟个?,贪婪变成不贪婪;
还有很多装不下,等着以后来增加
二、正则表达式的各种符号及其含义
1、常用符号
常见元字符 | |
元字符 | 说明 |
\s | 匹配单个空格,包括tab键和换行符 |
\S | 匹配出单个空格符之外的所有字符,\S与\s互为逆运算 |
\d | 匹配从0~9的数字 |
\w | 匹配字母,数字或者下划线字符 |
\W | 匹配所有与\w不匹配的字符,\W与\s互为逆运算 |
\cx | 匹配由x指明的控制字符。例如,\cZ匹配一个Control-Z。x的值必须为A~Z或者a~z之一。否则,将c视为一个愿意的'c'字符 |
\f | 匹配一个换页符,等价与\x0c和\cL |
\n | 匹配一个换行符,等价于\x0a和\cJ |
\r | 匹配一个回车符,等价于\x0d和\cM |
\t | 匹配一个制表符,等价于\x09和\cI |
\v | 匹配一个垂直制表符。等价于\x0b和\cK |
. | 用于匹配除换行符之外的所有字符 |
限定符 | * | 匹配前导字符出现零次或者多次 |
+ | 匹配前导字符出现一次或者多次 | |
? | 匹配前导字符出现零次或者一次 | |
{n} | 匹配前导字符出现n次,n>=0; | |
{n,} | 匹配前导字符至少出现n次,m} | 匹配前导字符至少出现n次,最多出现m次;m>n>=0; |
定位符 | ^ | 匹配模式必须出现在目标字符串开头 |
$ | 匹配模式必须出现在目标的结尾 | |
\b | 匹配模式必须出现在目标字符串的开头或者结尾的两个边界之一 | |
\B | 匹配对象必须位于目标字符串的开头和结尾的两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾 |
正则表达式匹配模式的范围指定符
-
- []限定的模式指定了其中一个字符的出现的可能。如/[A-Z]/表示匹配从A到Z的任何一个字符;/[A-Za-z]/表示匹配从A到Z或者从a-z的任何一个字符;
- ()限定的模式指定()里包含的内容必须同时出现在对象中。如/(abc)[0-9]/意思是目标字符串中出现的abc1,abc2...abc9中9个中的任何一个,而不是ab1,a2等;
- “|”类似于逻辑运算中的“或”运算,如:/sb|sbb|6/表示与目标对象中的"sb","sbb","6"中任何一个相匹配;
- 当^符出现在[]中时,表示取否定运算。如:/[^A-G]/表示与目标对象中除了A-G之外的字符相匹配;
在匹配模式需要使用元字符时,需要使用转移字符“\+元字符”表示,如查找“12*”模式,我们可以使用/12\*/表示;构造玩正 则表达式以后,就可以像使用数学表达式一样来求值。正则表达式在匹配过程中是按照从左向右的顺序进行的,其操作符具有一定 的优先级顺序
优先级顺序 | ||
优先级 | 操作符 | 说明 |
1 | \ | 转义符 |
2 | (),(?:),(?=),[] | 圆括号和方括号 |
3 | *,+,?,{n},{n,},m} | 限定符 |
4 | ^,$,\anyMatchcharacter | 位置顺序 |
5 | | | 或操作 |
3、Java里的正则
Java.util.regex:
Matcher类; (匹配器 )
Pattern类; (表达式)
Pattern p=Pattern.compile(“[a-z]*”);
2:建造一个匹配器
Matcher m=p.matcher(str);
3:进行判断,得到结果
Boolean b=m.matches();
String对象的4个正则表达式用法
String对象的4个正则表达式方法 | |
search() | 用于查找特定子字符串,其基本语法为var str=strObj.search(re);方法返回第一个与正则表达式匹配的子字符串; |
replace() | 用于检索与替换操作,其基本语法格式为:strObj.replace(re,str);如果re不是正则表达式,则表示普通字符串替换; |
match() | 使用正则表达式模式对字符串进行查找,使用方法为var array=strObj.match(re);返回三个属性:1)input包含整个被查找字符串,2)index包含了整个被查找字符串中的匹配的子字符串的位置,lastindex属性包含了最后一次匹配字符串的位置; |
split() | 可以使用正则表达式做参数作为分割字符标志分割字符串; |
4、javascript里的正则
Javascript中使用正则表达式的方法有二:
- 一是使用RegExp对象
-
- 其基本语法为:var rx=new RegExp(pattern[,flags]);,其中参数pattern是一个字符串,表示要使用的正则表达式模式,参数flag为一个可选的字符串,表示如何应用模式的标志,多种标志可以组合使用。
- 主要有三种模:g;全文查找出现的所有模式;i:忽略大小写;m:多行查找;
- 二是使用正则表达式直接量 var rx=/pattern/flags;
-
- pattern表示使用的正则表达式模式,flag如何应用的标记同上;
- 其基本语法为:var rx=new RegExp(pattern[,flags]);,其中参数pattern是一个字符串,表示要使用的正则表达式模式,参数flag为一个可选的字符串,表示如何应用模式的标志,多种标志可以组合使用。
- 主要有三种模:g;全文查找出现的所有模式;i:忽略大小写;m:多行查找;
- pattern表示使用的正则表达式模式,flag如何应用的标记同上;
正则对象表达式对象
属性 | index | 只读属性,返回字符串中第一次与模式相匹配的子字符串的开始位置,初始值为-1; |
input | 只读属性,返回当前被正则表达式模式作用的字符串,可以简写为“$_”,初始值为空字符串; | |
lastIndex | 只读属性,返回被查找字符串中下一次成功匹配的子字符串的开始位置,其初始位置为-1,其值会随着匹配的不同而被修改; | |
lastMatch | 只读属性,返回正则表达式在搜索过程中最后匹配的字符,可以简写为:“$&”; | |
lastParen | 只读属性,返回正则表达式在查找过程中最后用园括号括起来的子匹配; | |
leftContext | 只读属性,返回被搜索字符串中从开始位置到最后匹配之前为之间的字符,可以简写为"$^"; | |
rightContext | 只读属性,返回被搜索字符串中从最后一个匹配位置开始到字符串结尾之间的字符,可以简写为"$'"; | |
$1-$9 | 代表$1,$2...$9等9个只读属性,返回9个在模式匹配期间找到的,最近保存的部分; | |
RegExp对象的实例属性 | ||
global | 只读属性,布尔值,表示创建RegExp时是否设置了g标志,如果设置了则返回true,否则返回false; | |
ignoreCase | 只读属性,布尔值,表示创建RegExp时是否设置了i标志,如果设置了则返回true,否则返回false; | |
multiline | 只读属性,布尔值,表示创建RegExp时是否设置了m标志,如果设置了则返回true,否则返回false; | |
source | 只读属性,字符串型,返回正则表达式模式字符串; | |
RegExp对象的方法 | ||
exec() | RegExp对象的exec()方法是与正则表达式匹配的强大方法,语法格式为:array=reObj.exec(str); | |
test() | RegExp对像的Test()方法用于在给定的字符串中测试正则表达式是否匹配,其基本语法为:var passed=reObj.text(str);如果匹配则返回true,否则返回false | |
compile() | RegExp对象的compile()方法用于将正则表达式编译为内部格式,从而执行得更快,其基本语法为:reObj.compile(pattern[,flag]); |