Java正则表达式语法规则(具体)
大家好,又见面了,我是你们的朋友全栈君。
一、正则表达式作用
正则表达式定义了字符串的模式,可以用于搜索、编辑或处理文本。
二、Java正则表达式语法规则
1.先清晰一个问题—— 转义字符
例如:
在C语言中,“\n”表示换行,同样的Java中我们也可以使用“\n”表示换行。对于单个“\”如“\\”,其后字符表示转义字符,输出一个反斜杠“\”。但是双“\\”则表明要插入正则表达式的反斜线,其后的字符具有特殊含义。所以在 Java 正则表达式中需要有两个反斜杠才能被解析为其他语言中的转义功能。或者说在 Java 正则表达式中,两个 \\ 代表其他语言中的一个 \,这也就是为什么表示一位数字的正则表达式是 \\d,而表示一个普通的反斜杠是 \\。如下所示。
System.out.print("\\"); // 输出为 \
System.out.print("\\\\"); // 输出为 \\
2.正则表达式语法
字符 | 说明 |
---|---|
\ | 将下一字符标记为特殊字符、文本、反向引用或进制转义符。 例:“\n” 表示换行符,“\\(” 表示 “(“。 |
^ | 匹配字符串开始输入的位置。 |
$ | 匹配输入的字符串最末位置。 |
* | 零次或多次匹配前面的字符或子表达式。 例: zo* 匹配”z”和”zoo”。* 相当于 {0,}。 |
+ | 至少有一次匹配前面的字符或子表达式。 例: “zo+”与”zo”和”zoo”匹配,但与”z”不匹配。+ 相当于 {1,}。 |
? | 零次或一次匹配前面的字符或子表达式。 例:”do(es)?”匹配”do”或”does”中的”do”。? 相当于 {0,1}。 |
{ n} | 匹配指定的 n 次。(n为非负整数) 例:”o{2}”与”food”中的两个”o”匹配。 |
{ n,} | 最少匹配 n 次。(n为非负整数) 例: “o{2,}”,至少匹配2次,所以”foood”中有 3个o,匹配了3次。 |
{ n,m} | 最少匹配 n 次,最多匹配 m 次。(n、m为非负整数,n <= m) 例:”o{1,3}”匹配1-3个o,所以匹配”fooooood”的前3个o。 PS:逗号和数字之间不能有空格。 |
? | 字符 ? 紧随任何其他限定符(*、+、?、{ n}、{ n,}、{ n,m})之后时,表示匹配模式是”非贪心的”,其搜索尽可能短的字符串,默认的”贪心”模式搜索尽可能长的字符串。 例:在字符串”oooo”中,”o+?”只匹配单个”o”,而”o+”匹配所有”o”。 |
. | 匹配除”\r 和 \n”之外的任何单个字符。 |
(pattern) | 匹配 pattern 并捕获该匹配的子表达式。若要匹配括号字符 ( ),使用”\(“或者”\)”。 |
(?:pattern) | 匹配 pattern 但不捕获该匹配的子表达式。 |
(?=pattern) | 执行正向预测先行搜索的子表达式,匹配处于匹配 pattern 的字符串的起始点的字符串。 |
(?!pattern) | 执行反向预测先行搜索的子表达式,匹配不处于匹配 pattern 的字符串的起始点的字符串。 |
x|y | 匹配 x 或 y。 例:’z|food’ 匹配”z”或”food”。'(z|f)ood’ 匹配”zood”或”food”。 |
[ xyz ] | 匹配包含在内的字符。 例:”[abc]”匹配”plainbc”中的”abc”。 |
[^xyz] | 匹配不包含在内的字符。 例:”[^abc]”匹配”plain”中”p”,”l”,”i”,”n”。 |
[a-z] | 匹配在范围内的字符。 例:”[a-z]”匹配a-z的所有小写字母。 |
[^a-z] | 匹配不在范围内的字符。 例:”[^a-z]”匹配除a-z以外的字符。 |
\b | 匹配边界字符。 例:”er\b”匹配边界上的”er”,不匹配”verb”中间的”er”。 |
\B | 不匹配边界字符。 例:”er\B”匹配”verb”中间的”er”,不匹配”never”边界上的”er”。 |
\cx | 匹配 x 指示的控制字符。(x 的值必须在 A-Z 或 a-z 之间) 例:\cM 匹配 Control-M 或回车符。 |
\d | 数字字符匹配。相当于 [0-9]。 |
\D | 非数字字符匹配。相当于 [^0-9]。 |
\f | 换页符匹配。相当于 \x0c 和 \cL。 |
\n | 换行符匹配。相当于 \x0a 和 \cJ。 |
\r | 匹配一个回车符。相当于 \x0d 和 \cM。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等。 |
\S | 匹配任何非空白字符。 |
\t | 制表符匹配。相当于 \x09 和 \cI 。 |
\v | 垂直制表符匹配。相当于 \x0b 和 \cK 。 |
\w | 匹配任何字类字符,包括下划线。相当于”[A-Za-z0-9_]”。 |
\W | 与任何非单词字符匹配。相当于”[^A-Za-z0-9_]”。 |
\xn | 匹配 n,此处的 n 是一个十六进制转义码。十六进制转义码必须正好是两位数长。 例:”\x41″匹配”A”。”\x041″与”\x04″&”1″等效。允许在正则表达式中使用 ASCII 代码。 |
\num | 匹配 num,此处的 num 是一个正整数。到捕获匹配的反向引用。 例:”(.)\1″匹配两个连续的相同字符。 |
\n | 标识一个八进制转义码或反向引用。如果 \n 前面至少有 n 个捕获子表达式,那么 n 是反向引用。否则,如果 n 是八进制数 (0-7),那么 n 是八进制转义码。 |
\nm | 标识一个八进制转义码或反向引用。如果 \nm 前面至少有 nm 个捕获子表达式,那么 nm 是反向引用。如果 \nm 前面至少有 n 个捕获,则 n 是反向引用,后面跟有字符 m。如果两种前面的情况都不存在,则 \nm 匹配八进制值 nm,其中 n 和 m 是八进制数字 (0-7)。 |
\nml | 当 n 是八进制数 (0-3),m 和 l 是八进制数 (0-7) 时,匹配八进制转义码 nml。 |
\un | 匹配 n,其中 n 是以四位十六进制数表示的 Unicode 字符。 例:\u00A9 匹配版权符号 (©)。 |
写在最后, 需要区分不同哦:
在“Java语言规范”中,位于字符串中的单个反斜线(“\”)会被解释为“转义字符”。因此必须在字符串中使用双反斜线(“\\”)才代表正则表达式,从而不被 Java 字节码编译器解释。
例:“\b” 表示 退格;而 “\\b” 为正则表达式,表示匹配边界字符。
例: “\(hello\)” 是非法的;加上“\\” 后表示正则表达式,合法 “\\(hello\\)”。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161590.html原文链接:https://javaforall.cn
相关文章
- java sortedset用法_Java SortedSet headSet()用法及代码示例[通俗易懂]
- JAVA解析XML格式字符串「建议收藏」
- java实现在线预览–poi实现word、excel、ppt转html
- 编写java判断闰年_用Java程序判断是否是闰年的简单实例[通俗易懂]
- java启动器_JAVA基础:Java 启动器如何查找类
- java定时器实例_Java定时器小实例
- JAVA:定时器的三种方法(详细注解)
- Java 19 已至,虚拟线程 = 王炸!!
- JAVA外文参考文献_java参考文献近五年
- 大数据必学Java基础(九十七):事务及回滚点
- 【JAVA】Java 日志打印规范
- Java 代码审计基础知识 — java反射机制
- 干货:Java多线程详解(内附源码)编程语言
- java 发起http post请求详解编程语言
- Java学习笔记之七java函数的语法规则总结详解编程语言
- java动态代理详解编程语言
- eeOracle放弃Java EE:梦想的终结(oracle放弃java)
- Java判断字符串是否符合yyyyMMdd日期格式详解编程语言
- Java多线程(五):线程等待与唤醒详解编程语言
- Java double 加、减、乘、除详解编程语言
- 技术的融合突破极限:Java与Redis的技术融合(java与redis)
- 数据库Java连接MySQL数据库实现数据添加(java添加mysql)
- 时间设置Redis中Java如何设置过期时间(redisjava过期)
- 数据处理Java处理Redis过期数据的技巧(redisjava过期)
- 处理处理Redis Java中的过期Key(redisjava过期)
- Linux下编译Java文件,迎来新体验(linux编译java文件)
- Java实现Linux:跨平台解决方案(java 实现linux)
- 实现Java认证让你离Oracle更近一步(java认证oracle)
- Java与Oracle联手赋能全新版本面世(java版本oracle)
- Java程序中使用Redis链接提升效率(redis 链接java)
- Java官方正式宣布AWT、2D、Swing等项目解散
- java操作XML实例代码
- java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)