正则表达式也就是所说的规则表达式(Regular Expression)正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本.
一 、解释正则表达式中的 g 、i、m
- g : 表示全局(global)模式,也就是说应用于是所有的字符串。并不是说检索到第一个符合的匹配项就结束了
- i :表示字符不区分大小写(case-insensitive),就是检索时字符时不考虑字符的大小写
- m :表示多行(multiline),就是说到达一行的末尾还会继续下一行检索有没有符合规则的匹配项
二、正则表达式中的字符含义:
\f | 表示换页符相当于 \x0c 和 \cL |
---|---|
\n | 换行符,相当于\x0c和\cL |
\r | 回车符,相当于 \x0d 和 \cM |
\s | 匹配任意空白字符,包含空格符、制表符、换页符等,相当于 [\f\n\v\t] |
\S | 匹配任意的非空白字符,相当于[^ \f\n\v\t] |
\t | 表示制表符,相当于\x09 和 \cI |
\v | 表示垂直制表符等价于\x09、cl |
\b | 边界符,匹配单词边界 |
\B | 非单词边界的匹配 |
\w | 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’ |
\W | 匹配非字母、数字、下划线。等价于’[A-Za-z0-9_]’ |
\0 | 匹配 NULL(U+0000)字符, 不要在这后面跟其它小数,因为 \0 是一个八进制转义序列 |
$ | 匹配字符串的结尾位置,设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。匹配 $ 字符本身,请使用 转义符即可 \$ |
() | 标记子表达式的开始和结束位置子表达式可以获取以便以后使用 |
* | 表示匹配前面的子表达式零次或者多次,匹配* 使用转义字符 \* |
+ | 表示匹配前面的子表达式一次或者多次,匹配+ 使用转义字符 \+ |
. | 表示匹配除了换行符\n 之外的 所有单字符 ,匹配. 使用转义字符 \. |
? | 表示匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \? |
[ | 标记一个中括号的表达式开始,匹配[ 使用转义字符 \[ |
\ | 转义字符,将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n’ 匹配字符 ‘n’。’\n’ 匹配换行符。序列 ‘\’ 匹配 “”,而 ‘(’ 则匹配 “(”。 |
^ | 表示字符串的开始位置,在使用中 [] 代表的是一个字符集,^ 只有在字符集中才是反向字符集的意思,表示否定。其余的一般都表示限定开头,要匹配^ 字符 使用转义字符 \^ |
{ | 标记限定符表达式的开始,要匹配{ 字符 使用转义字符 \{ |
| | 指明两项之间的一个选择,相当于逻辑表达式中或者,要匹配| 字符 使用转义字符 \| |
- | 连字符 ,连字符包含开始值和结束值 在中括号[] 中显示- 需要转义符帮忙\- |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。 |
{n,} | n 是一个非负整数。至少匹配n 次。例如,‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,“o{1,3}” 将匹配 “fooooood” 中的前三个 o。‘o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。 |
x|y | 匹配X或者Y |
[abc] | 字符集合,匹配所包含的任意一个字符,例如{abc}中可以匹配"about"中的"a"和"b" |
[^abc] | 负值字符集合。匹配未包含的任意字符。也就是说白表示否定 |
[a-z] | 字符范围。匹配指定范围内的任意字符。例如,’[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。 |
[^a-z] | 字符范围。非指定范围内的任意字符。例如,’[^a-z]’ 表示不是小写字符即可 |
(x) | 匹配 ‘x’ 并且记住匹配项,就像下面的例子展示的那样。括号被称为 捕获括号。模式/(foo) (bar) \1 \2/中的 ‘(foo)’ 和 ‘(bar)’ 匹配并记住字符串 “foo bar foo bar” 中前两个单词。模式中的 \1 和 \2 匹配字符串的后两个单词。注意 \1、\2、\n 是用在正则表达式的匹配环节。在正则表达式的替换环节,则要使用像 $1、 n 这样的语法,例如,‘bar foo’.replace( /(…) (…)/, ‘$2 $1’ )。 |
---|---|
(?:x) | 匹配 ‘x’ 但是不记住匹配项。这种叫作非捕获括号,使得你能够定义为与正则表达式运算符一起使用的子表达式。来看示例表达式 /(?:foo){1,2}/。如果表达式是 /foo{1,2}/,{1,2}将只对 ‘foo’ 的最后一个字符 ’o‘ 生效。如果使用非捕获括号,则{1,2}会匹配整个 ‘foo’ 单词。 |
x(?=y) | 匹配’x’仅仅当’x’后面跟着’y’.这种叫做先行断言。例如,/Jack(?=Sprat)/会匹配到’Jack’仅仅当它后面跟着’Sprat’。/Jack(?=Sprat |
(?<=y)x | 匹配’x’仅仅当’x’前面是’y’.这种叫做后行断言。例如,/(?<=Jack)Sprat/会匹配到’ Sprat ‘仅仅当它前面是’ Jack '。/(?<=Jack |
x(?!y) | 仅仅当’x’后面不跟着’y’时匹配’x’,这被称为正向否定查找。例如,仅仅当这个数字后面没有跟小数点的时候,/\d+(?!.)/ 匹配一个数字。正则表达式/\d+(?!.)/.exec(“3.141”)匹配‘141’而不是‘3.141’ |
还有一些直接写了
\xn :匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。
\num:匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。
三、运算符运行的顺序
1、等级自上而下,同级从左到右,下图表示:
例如:手机号格式验证
//表示手机号格式,符合就会返回true,否则就返回flase
public static void tel(){
String Iphone = "手机号:1735388863";
String regex = "[1][3578]\\d{9}";
System.out.println(Iphone.matches(regex));
也可以将检索符合的内容输出
var tel = "iphone:17353888614";
var regex = /\b[a-z]{5}\w\:[1][3578]\d{9}/
document.write(tel.match(regex)+"<br/>");
匹配url地址或者端口路径什么:
<script>
var str = "http://www.baidu.com";
var patt1 = /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
arr = str.match(patt1);
document.write(arr);
</script
匹配邮箱:
<script>
var str = "[email protected]";
var patt1 = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
document.write(str.match(patt1));
</script
只要理解知道这些正则表达式的字符表示的什么,规则就可以拼写出来,自己去写规则吧