正则表达式
Posted tiechui2015
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。
1.正则表达式:普通字符和元字符(特殊字符)组成的【模式】
2.特殊字符:
【.】匹配除 "\n" 之外的任何单个字符。
要匹配包括 ‘\n‘ 在内的任何字符,请使用象 ‘[.\n]‘ 的模式。
【\w】匹配包括下划线的任何单个单词字符。等价于‘[A-Za-z0-9_]‘。
【\W】匹配任何单个非单词字符。等价于 ‘[^A-Za-z0-9_]‘。
【\d】匹配一个数字字符。等价于 [0-9]。
【\D】匹配一个非数字字符。等价于 [^0-9]。
【\n】匹配一个换行符。等价于 \x0a 和 \cJ。
【\r】匹配一个回车符。等价于 \x0d 和 \cM。
【\s】匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [\f\n\r\t\v]。
【\S】匹配任何非空白字符。等价于 [^\f\n\r\t\v]。
【\t】匹配一个制表符。
【\b】匹配一个单词边界,也就是指单词和空格间的位置。
例如, ‘er\b‘ 可以匹配"never" 中的 ‘er‘,但不能匹配 "verb" 中的 ‘er‘。
可以匹配"never!"中的‘er‘,即\b是单词末尾
【\B】匹配非单词边界。‘er\B‘ 能匹配 "verb" 中的 ‘er‘,但不能匹配 "never" 中的 ‘er‘。
【^】 匹配输入字符串的开始位置。
如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n‘ 或 ‘\r‘ 之后的位置。
^is即匹配字符串开始位置的is。
"this is ..."中无法匹配
"is this is"则可以匹配开头的一个is,后续的不匹配
【$】 匹配输入字符串的结束位置。
正则"abzz$" 匹配字符串:"abzz" 不匹配 "abzzaa"
【*】匹配之前的子表达式0或多次 ‘ab*‘ 匹配 abbbb abb ab a
‘(ab)*‘ 匹配 abab ababab 如果没有ab则也算匹配,但未匹配到内容
【+】匹配之前的子表达式1或多次 ‘ab+‘ 匹配 abbbb abb ab
【?】 匹配前面的子表达式零次或一次。 ‘ab?‘ 匹配 ab a
例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 0,1。
【n】n 是一个非负整数。匹配确定的 n 次。
例如,‘o2‘ 不能匹配 "Bob" 中的 ‘o‘,但是能匹配 "food" 中的两个 o。
‘(oo)2‘ 匹配fooood
【n,】n 是一个非负整数。至少匹配n 次。
例如,‘o2,‘ 不能匹配 "Bob" 中的 ‘o‘,
但能匹配 "foooood" 中的所有 o。‘o1,‘ 等价于 ‘o+‘。‘o0,‘ 则等价于 ‘o*‘。
【n,m】m 和 n 均为非负整数,其中n <= m。
最少匹配 n 次且最多匹配 m 次。
例如,"o1,3" 将匹配 "fooooood" 中的前三个 o。‘o0,1‘ 等价于 ‘o?‘。
请注意在逗号和两个数之间不能有空格。(is)(1,5?)@is
【?】当该字符紧跟在任何一个其他限制符 (*, +, ?, n, n,, n,m) 后面时,
匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,
而默认的贪婪模式则尽可能多的匹配所搜索的字符串。
例如,对于字符串 "oooo",‘o+?‘ 将匹配单个 "o",而 ‘o+‘ 将匹配所有 ‘o‘。
对于字符串 "isisd" (is)1,5?d 匹配 isisd
如上误区:大家会误认为应该匹配isd而不是isisd。
正解:正则先匹配到一个串,如果是贪婪模式的话会尝试继续向右探索是否可以匹配更长
正则先匹配到一个串,如果是非贪婪模式,则不会继续向右探索。
所以,(is)1,5?d先匹配到isisd,由于是非贪婪模式所以不再向右探索
贪婪与否是在匹配到第一个字串后,是否继续向右继续探索
根据正解,在看一个实例:
对于字符串"isxxxdasdfsfd" 正则:is.*d 匹配isxxxdasdfsfd
正则:is.*?d 匹配isxxxd
【(?!exp)】i\w(?!d) 匹配"xxxiadzzaicc" 中的"ic"
匹配后面跟的不是exp的位置,exp不匹配内容
ia(?!c) abcdedfiacsdffdfiab
【(?<!exp)】(?<!d)i\w 匹配"xxdiabzzaicc" 中的"ic"
匹配前面不是exp的位置,表达式不匹配内容
【(?=exp)】i\w(?=d) 匹配"xxiadxxxibc"中的"ia"
匹配后面跟的是exp的位置,exp不匹配内容
【(?<=exp)】(?<=d)i\w 匹配"xxdiaxxxbic"中的"ia"
匹配前面跟的是exp的位置,exp不匹配内容
【(?i)】表示不区分大小写
(?i)abc 表示abc都忽略大小写 aBc ABC abC ABC
a(?i)bc 表示bc忽略大小写
a((?i)b)c 表示只有b忽略大小写
【[]】是定义匹配的字符范围。
比如 [a-zA-Z0-9_] 匹配任意一个英文字符和数字和下划线,等价于【\w】
[a-z]匹配任意一个所有小写英文字符
a[0-9]b匹配a1b a2b
a[0-9]+b 匹配 a1b a359b a23495739857987985b
[^a-c] 匹配除了a b c之外的字符(在中括号中的【^】是【非】的意思)
=========================================================================================================
java正则:
Pattern类:
pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。
Pattern p=Pattern.compile("abc");需要调用compile获得。
Matcher类:
Matcher对象是对输入字符串进行解释和匹配操作的引擎。与Pattern类一样,
Matcher也没有公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象。
PatternSyntaxException:
PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
//模式对象
Pattern p=Pattern.compile("abc");
//匹配对象:负责用模式对象 匹配 字符串=abcdef123456
Matcher matcher = p.matcher("abcdef123456");
while(m.find())//find()从上次查找的位置之后继续向后查找与模式Pattern匹配的一个字符(串),第一次从第一个字符开始
System.out.println(m.group());//本次查找匹配到的内容
System.out.println(m.find(10));//从索引为10的位置开始查找一个与模式匹配的字符(串)
System.out.println(m.group());//find(10)所匹配到的字符
JS正则:
var str="Is this all there is?";
//声明正则对象【/xxxx/】
var patt1=/is/gi;//g=全局匹配 i=忽略大小写
str.match(patt1);//查找是否含有匹配的字符,没有返回null
patt1.exec("The best things in life are free")//查找是否含有匹配的字符,没有返回null
var patt1=/[abc]/;
patt1.test("The best things in life are free");//return true;没有返回false
var regu =/^[1][3][0-9]9$/;
console.log("13101161911".match(regu));
console.log(regu.exec("18301161911"));
console.log(regu.test("18301161911"));
以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章