正则表达式
一、元字符
"^"
匹配行或者字符串的起始位置。
eg:^This
匹配This is Regex
中的This
。
"$"
匹配行或者字符串的结束位置。
eg:Regex$
匹配This is Regex
中的Regex
。
"\w"
匹配字母,数字,下划线。
eg:\w\w\w
匹配This is Regexxxx
中的Thi
、Reg
和exx
。
"\b"
匹配一个位置,常用于匹配单词边界。
它的前一个字符和后一个字符不全是"\w",除了前后都是"\w"的情况其它都可以。
eg:\bis\b
匹配This is Regex
中的is
。
"\d"
匹配数字。
eg:\d\d\d
匹配1234567
中的123
和456
。
"\s"
匹配空格。
eg:\d\d\s\d
匹配12 34567
中的12 3
。
"[ad]"
匹配括号内存在的字符,还可以写成"[a-z]"来匹配。
"."
匹配除换行符以外的任何字符,相当于是"\w"和"\s"的组合。
二、反义
"\W"
匹配不是字母,数字,下划线的字符。
"\B"
匹配一个位置,常用于匹配非单词边界。
它的前一个字符和后一个字符全是"\w",即前后都是"\w"的情况。
"\D"
匹配不是数字的字符。
"\S"
匹配不是空格的字符。
"[^ad]"
匹配不存在括号内的字符。
三、量词、懒惰限定符
"*"
重复零次或更多次。
eg:a*
匹配aaaaaaaa
整个字符串。
"*?"
重复零次或更多次,但尽可能少重复。
eg:a.*?b
匹配acbaab
中的acb
和aab
。
"+"
重复一次或更多次。
eg:a+
匹配aaaaaaaa
整个字符串。
"+?"
重复一次或更多次,但尽可能少重复。
eg:a.+?b
匹配acbaab
中的acb
和aab
。
"?"
重复零次或一次。
eg:a?
匹配aaaaaaaa
中的八个a
。
"{n}"
重复n次。
eg:a{3}
匹配aaaaaaaa
中的aaa
和aaa
。
"{n,m}"
重复n到m次。
eg:a{3,6}
匹配aaaaaaaa
中的aaaaaa
。
"{n,m}?"
重复n到m次,但尽可能少重复。
eg:a{3,6}?
匹配aaaaaaaa
中的aaa
和aaa
。
"{n,}"
重复n到更多次。
eg:a{3,}
匹配aaaaaaaa
中的aaaaaaaa
整个字符串。
"{n,}?"
重复n到更多次,但尽可能少重复。
eg:a{3,}?
匹配aaaaaaaa
中的aaa
和aaa
。
四、捕获分组
"(exp)"
匹配exp,并捕获文本到自动命名的分组里。
"(?<name>exp)"
匹配exp,并捕获文本到名称为name的组里。
"(?:exp)"
匹配exp,不捕获匹配的文本,也不给此分组分配组号。
"(?=exp)"
匹配exp前面的位置,如 "How are you doing" 正则"(?<txt>.+(?=ing))" 这里取ing前所有的字符,并定义了一个捕获分组名字为 "txt" 而"txt"这个组里的值为"How are you do"。
"(?<=exp)"
匹配exp后面的位置,如 "How are you doing" 正则"(?<txt>(?<=How).+)" 这里取"How"之后所有的字符,并定义了一个捕获分组名字为 "txt" 而"txt"这个组里的值为" are you doing"。
"(?!exp)"
匹配后面跟的不是exp的位置,如 "123abc" 正则 "\d{3}(?!\d)"匹配3位数字后非数字的结果。
"(?<!exp)"
匹配前面不是exp的位置,如 "abc123 " 正则 "(?<![0-9])123" 匹配"123"前面是非数字的结果也可写成"(?!<\d)123"。
转载文章
读懂正则表达式就这么简单