字符组
字符组(
[]
)允许匹配一组可能出现的字符。
可以发现[Pp]既可以匹配大写的P也可以匹配小写的p
接下来,请你使用字符组匹配Java和 java。
/[Jj]ava/
匹配多个单词
请你使用字符组匹配Ruby、Rube、ruby、rube。
/[Rr]ub[ye]/
区间
一些常见的字符组非常大,比如,我们要匹配任意的数字
如果依照上述代码,每次我们都需要使用[0123456789]。
但是这样好吗?
如果要匹配从a-z的字母呢?我想你肯定不愿意从a写到z了!
为了适应这一点
正则表达式引擎在字符组中使用连字符(-)
代表区间,依照这个规则,我们可以总结出三点:
- 要匹配任意数字可以使用[0-9];
- 如果想要匹配所有小写字母,可以写成[a-z];
- 想要匹配所有大写字母可以写成[A-Z]。
接下来需要你匹配数据所有的数字、小写字母和大写字母。
/[0-9a-zA-Z]/
匹配特殊字符
正则表达使用了 – 号代表了区间 但是我们有时候需要匹配的符号就是 -号 这该怎么办呢?
这个时候我们需要对-号进行转义操作,即 -。
在正则中使用 \ 就可以进行对特殊符号进行转义, 对 – 进行转义就可以表示为 -,即 – 就代表了 – 号本身。
偷偷告诉你,转义符 \ 也适用于其他的符号,例如匹配圆括号可以使用 (
/[\[\]\-\(\)]/
匹配字母
[]字符组中可以放多个条件例如,想要匹配数字的小写字母可以这样写:[0-9a-z]
使用正则表达式匹配字母,规则如下:
匹配a-z的小写字母;
匹配A-F的大写字母;
/[a-zA-F]/
匹配目标数据
[a-f0-3]
取反
到目前为止,我们定义的字符组都是由可能出现的字符定义,不过有时候我们可能希望根据不会出现的字符定义字符组。
例如:匹配不包含数字的字符组
可以通过在字符数组开头使用
^
字符实现取反操作,从而可以反转一个字符组(意味着会匹配任何指定字符之外的所有字符)。
这里的
n[^e]
的意思就是n
后面的字母不能为e
。
接下来请你匹配爱
后面不包含你
的数据。
/爱[^你]/
不含小写字母的数据
请编写正则表达式,匹配不包含小写字母的数据。
/[^a-z]/
快捷匹配数字和字母
以目前学到的内容,如果想要匹配所有的字母,会使用[A-Za-z]
,要匹配数字会使用
[0-9]
还有没有更简洁的方式呢?
正则表达式引擎提供了一些快捷方式如:
\w
可以与任意单词字符匹配。当我们想要匹配任意数字的时候也可以使用快捷方式
\d
,d
即digit数字的意思,等价于[0-9]
。
快捷方式 | 描述 |
---|---|
\w | 与任意单词字符匹配,任意单词字符表示 [A-Z]、 [a-z]、[0-9]、_ |
\d | 与任意数字匹配 |
匹配单词
接下来,请你使用快捷方式匹配下面的单词。
匹配空白
\s快捷方式可以匹配空白字符,比如空格,tab、换行等。
匹配空白分隔的单词
单词边界
\b
匹配的是单词的边界,例如,
\bmaster\b
就仅匹配有边界的master
单词。
/\bcode\b/
匹配数字和小写字母
你需要使用一个正则表达式匹配字符串中的数字和小写字母。
/[a-z0-9]/
快捷方式取反
快捷方式也可以取反,例如对于\w的取反为\W,将小写改写成大写即可,其他快捷方式也遵循这个规则。
开始和结束
正则表达式中
^
指定的是一个字符串的开始,$
指定的是一个字符串的结束。
请编写正则表达式匹配以OS结尾的字符串。
OS$
任意字符
.
字符代表匹配任何单个字符,它只能出现在方括号以外。
值得注意的是: .
字符只有一个不能匹配的字符,也就是换行符(\n
),不过要让.
字符与换行符匹配也是可以的,以后会讨论。
可选字符
有时,我们可能想要匹配一个单词的不同写法,比如
color
和colour
,或者honor
与honour
。
这个时候我们可以使用 ?
符号指定一个字符、字符组或其他基本单元可选,这意味着正则表达式引擎将会期望该字符出现零次或一次。
这里 u? 表示u是可选的,即可以出现也可以不出现,可以匹配的是 honor 和 honour 。
通过这个案例可以知道?的作用就是匹配它之前的字符0次或1次。
请你思考一个问题: .? 表达式能匹配什么呢?
请你使用正则来匹配 favorite和favourite这两种写法。
/favou?rite/
可选任意字符
请你使用正则来匹配codejiaonang的不同写法。
/\(?code\.?\(?\-?\)?\s?jiaonang/
codejiaonang
code.jiaonang
code-jiaonang
(code)jiaonang
code(jiaonang)
code jiaonang
重复
到目前为止,我们只是学习了关于仅出现一次的字符串匹配,在实际开发中,肯定不能满足需求,比如要匹配电话号码、身份证的时候就无法满足需求了。
如果遇到这样的情况,我们可能期望一个字符组连续匹配好几次。
在一个字符组后加上{N}
就可以表示在它之前的字符组出现N
次。
/\d{3}\-\d{5}/
重复区间
能有时候,我们不知道具体要匹配字符组要重复的次数,比如身份证有15位也有18位的。
这里重复区间就可以出场了,语法:{M,N},M是下界而N是上界。
举个例子:
\d{3,4}
既可以匹配3
个数字也可以匹配4
个数字,不过当有4
个数字的时候,优先匹配的是4
个数字,这是因为正则表达式默认是贪婪模式,即尽可能的匹配更多字符,而要使用非贪婪模式,我们要在表达式后面加上 ?
号。
匹配电话号码
使用正则表达式提取电话号码,假设电话号码有两种规则:
- 以3个数字开头,后面7个数字,例如:020-7281333
- 以4个数字开头,后面7个数字,例如:0731-8283431
现在请你使用一个正则表达式匹配所有符合这两种规则的电话号码。
/\d{3,4}?\-\d{7}/
开闭区间
有时候我们可能遇到字符组的重复次数没有边界,例如:
闭区间不写即可表示匹配一个或无数个。
速写
- 还可以使用两个速写字符指定常见的重复情况,可以使用
+
匹配1个到无数个,使用*
代表0个到无数个。 - 即:
+
等价于{1,}
,*
等价于{0,}
。
匹配f开头的数据
/^f\w+/
匹配所有手机号码
现在请你使用正则表达式匹配手机号码,假设手机号码规则如下:
- 必须是11位的数字;
- 第一位数字必须以1开头,第二位数字可以是[3,4,5,7,8]中的任意一个,后面9个数是[0-9]中的任意一个数字。
/^1[3-8]\d{9}/
匹配网站地址
请编写正则表达式,匹配以 http开头,以/结尾的所有数据。
/https?.\//
匹配以fu结尾的数据
/.*fu$/
实践:匹配电话号码
匹配电话号码,假设电话号码可以有下列两种方式:
- 0XX-XXXXXXX,例如020-8810456;
- 0XXXXXXXXX,例如0208810456。
020 代表区号,8810456是电话号码,区号第一个数字必须是0,电话号码的第一个数字必须大于等于1。
/0\d{2}\-?[1-9][0-9]{6}/
实践:匹配所有王姓同学的信息
^王.+\d{
4}
实例 | 描述 |
---|---|
[Pp]ython |
匹配 “Python” 或 “python”。 |
rub[ye] |
匹配 “ruby” 或 “rube”。 |
[abcdef] |
匹配中括号内的任意一个字母。 |
[0-9] |
匹配任何数字。类似于 [0123456789]。 |
[a-z] |
匹配任何小写字母。 |
[A-Z] |
匹配任何大写字母。 |
[a-zA-Z0-9] |
匹配任何字母及数字。 |
[^au] |
除了au字母以外的所有字符。 |
[^0-9] |
匹配除了数字外的字符。 |
实例 | 描述 |
. |
匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。 |
? |
匹配一个字符零次或一次,另一个作用是非贪婪模式 |
+ |
匹配1次或多次 |
* |
匹配0次或多次 |
\b |
匹配一个长度为0的子串 |
\d |
匹配一个数字字符。等价于 [0-9]。 |
\D |
匹配一个非数字字符。等价于 [^0-9]。 |
\s |
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
\S |
匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
\w |
匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。 |
\W |
匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]‘。 |
💚最后感谢张哲同学提供的资料: [])
感谢张同学带来的温暖💖
今天的文章javaSrcipt——练习正则表达式(初级练习集中营)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/66366.html