1.正则表达式:普通字符和元字符(特殊字符)组成的【模式】
2.特殊字符:
【.】匹配除 "
" 之外的任何单个字符。
要匹配包括 '
' 在内的任何字符,请使用象 '[.
]' 的模式。
【w】匹配包括下划线的任何单个单词字符。等价于'[A-Za-z0-9_]'。
【W】匹配任何单个非单词字符。等价于 '[^A-Za-z0-9_]'。
【d】匹配一个数字字符。等价于 [0-9]。
【D】匹配一个非数字字符。等价于 [^0-9]。
【
】匹配一个换行符。等价于 x0a 和 cJ。
【
】匹配一个回车符。等价于 x0d 和 cM。
【s】匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [f
v]。
【S】匹配任何非空白字符。等价于 [^f
v]。
【 】匹配一个制表符。
【】匹配一个单词边界,也就是指单词和空格间的位置。
例如, 'er' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
可以匹配"never!"中的'er',即是单词末尾
【B】匹配非单词边界。'erB' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
【^】 匹配输入字符串的开始位置。
如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '
' 或 '
' 之后的位置。
^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 次。
例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
'(oo){2}' 匹配fooood
【{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?'。
请注意在逗号和两个数之间不能有空格。(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)】iw(?!d) 匹配"xxxiadzzaicc" 中的"ic"
匹配后面跟的不是exp的位置,exp不匹配内容
ia(?!c) abcdedfiacsdffdfiab
【(?<!exp)】(?<!d)iw 匹配"xxdiabzzaicc" 中的"ic"
匹配前面不是exp的位置,表达式不匹配内容
【(?=exp)】iw(?=d) 匹配"xxiadxxxibc"中的"ia"
匹配后面跟的是exp的位置,exp不匹配内容
【(?<=exp)】(?<=d)iw 匹配"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"));