正则表达式详解
先简单了解后,然后再结合例子学习,会进步飞速哦!
正则表达式是什么?
正则表达式又叫做规则表达式(Regular Expression),他是一种文本模式,平时简写为Regex、Regexp、RE,是一种描述字符串匹配的模式,一种对字符串操作的逻辑公式,一种用事先定义好的特殊的字符,或者是这些字符的组合而成的“规范的字符串”。
正则表达式干什么的?
- 数据验证,验证字符串满足规则,比如获取手机号。
- 替换某一规则的字符串。
- 提取某一规则的字符串
正则表达式的组成
普通字符: a-z、A-Z、 0-9
元字符:
非打印字符:
- \n(换行),
- \f(换页),
- \r(回车),
- \s(空白字符),
- \S(非空白字符),
- \t(制表符),
- \v(垂直制表符
)
特殊字符:
-
$(结尾),
-
()(子表达式开头和结尾),
-
* (前面的表达式0或多次),
-
+(前面的表达式1或多次),
-
.(匹配出\n外的但字符),
-
[,
-
?(前面的表达式0或多次),
-
****(转义字符),
-
^(从开始匹配),
-
{,
-
|(二选一)
限定字符 -
* 匹配前面的子表达式 0或多次如ab* 可以匹配 a 也可以匹配 abc
-
**+**匹配前面的子表达式1或多次 如 ab+ 可以匹配 abc 不可以匹配 a
-
? 匹配前面的子表达式0或1次 如 ab(cd)? 可以匹配 absdfa中的 ab 也可以匹配 cdccc 中的cd
-
{n} n是个非负整数,匹配n次 ,a{2} 可以匹配 aab中的aa 但是不能匹配ab中的a
-
{n,} n是个非负整数,匹配至少n次 , a{2} aaaab可以匹配 aaaa
-
{n,m} n,m均为非负整数,至少匹配n次最多m次 a{2,3} aaaaab只能匹配aaa。
定位符 -
^ 字符串开头位置
-
$ 字符串结尾位置
-
\b 匹配单词边界 , 单词之间的空格
-
\B 匹配单词
简单正则详解
- [1-3][0-9]* [1-3]表示第一位只能是1-3, [0-9]表示 第二位只能是 0-9的数字,*表示 [0-9]出现1次或者多次。
- [0-9]{1,2} 表示0-9 最少1位,最多2位 0-99的数字都可以匹配。 第二种写法 [0-9][0-9]{0,1} 或者 [1-9][0-9]?
- <.*> 可以匹配到<1>123456<1>, <.*?>只能匹配到 <1>
- 查找重复的单词 \b([a-z]+)\1\b/ig \1标记第一个子匹配项, i表示不分大小写,g表示尽可能多的匹配
先写到这儿,遇到经典的再补充
常见的正则表达式
[a-z] //匹配所有的小写字母
[A-Z] //匹配所有的大写字母
[a-zA-Z] //匹配所有的字母
[0-9] //匹配所有的数字
[0-9.-] //匹配所有的数字,句号和减号
[ \f\r\t\n] //匹配所有的白字符
[^a-z] //除了小写字母以外的所有字符
[^\/^] //除了()(/)(^)之外的所有字符
[^"’] //除了双引号(")和单引号(’)之外的所有字符
^[a-zA-Z_]$ 所有的字母和下划线
^[[:alpha:]]{3}$ 所有的3个字母的单词
^a$ 字母a
^a{4}$ aaaa
^a{2,4}$ aa,aaa或aaaa
^a{1,3}$ a,aa或aaa
^a{2,}$ 包含多于两个a的字符串
^a{2,} 如:aardvark和aaab,但apple不行
a{2,} 如:baad和aaa,但Nantucket不行
\t{2} 两个制表符
.{2} 所有的两个字符
^[a-zA-Z0-9_]{1,}$ // 所有包含一个以上的字母、数字或下划线的字符串
^[a-zA-Z0-9_]+$ // 所有包含一个以上的字母、数字或下划线的字符串
^[1-9][0-9]*$ // 所有的正整数
^-?[0-9]+$ // 所有的整数
^[-]?[0-9]+(.[0-9]+)?$ // 所有的浮点数