文章目录

  • java.util.regex包介绍
  • 正则表达式语法
  • 实例及描述:
  • 代码示例
    • 1.Pattern.complie(String regex)
    • 2.Pattern.matches(String regex,CharSequence input)
      • 注意
    • 3.Pattern.matcher(CharSequence input)
    • 4.Matcher.matches()/ Matcher.lookingAt()/ Matcher.find()
    • 5.校验手机号
  • 资料

java.util.regex包介绍

是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。主要包括以下三个类

  • Pattern 类:pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。
  • Matcher 类:Matcher 对象是对输入字符串进行解释和匹配操作的 引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
  • **PatternSyntaxException:**PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

正则表达式语法

字符 说明
\ 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如, n匹配字符 n\n 匹配换行符。序列 \\\\ 匹配 \\\\( 匹配 (
^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与"\n"或"\r"之后的位置匹配。
$ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与"\n"或"\r"之前的位置匹配。
* 零次或多次匹配前面的字符或子表达式。例如,zo* 匹配"z"和"zoo"。* 等效于 {0,}。
+ 一次或多次匹配前面的字符或子表达式。例如,"zo+"与"zo"和"zoo"匹配,但与"z"不匹配。+ 等效于 {1,}。
? 零次或一次匹配前面的字符或子表达式。例如,"do(es)?“匹配"do"或"does"中的"do”。? 等效于 {0,1}。
{n} _n _是非负整数。正好匹配 n 次。例如,"o{2}"与"Bob"中的"o"不匹配,但与"food"中的两个"o"匹配。
{n,} _n _是非负整数。至少匹配 _n _次。例如,"o{2,}“不匹配"Bob"中的"o”,而匹配"foooood"中的所有 o。"o{1,}“等效于"o+”。"o{0,}“等效于"o*”。
{n,m} mn 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。例如,"o{1,3}"匹配"fooooood"中的头三个 o。‘o{0,1}’ 等效于 ‘o?’。注意:您不能将空格插入逗号和数字之间。
? 当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是"非贪心的"。"非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串。例如,在字符串"oooo"中,"o+?“只匹配单个"o”,而"o+“匹配所有"o”。
. 匹配除"\r\n"之外的任何单个字符。若要匹配包括"\r\n"在内的任意字符,请使用诸如"[\s\S]"之类的模式。
(pattern) 匹配 pattern 并捕获该匹配的子表达式。可以使用 $0…$9 属性从结果"匹配"集合中检索捕获的匹配。若要匹配括号字符 ( ),请使用"\(“或者”\)"。
(?:pattern) 匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。这对于用"or"字符 (|) 组合模式部件的情况很有用。例如,'industr(?:y|ies) 是比 ‘industry|industries’ 更经济的表达式。
(?=pattern) 执行正向预测先行搜索的子表达式,该表达式匹配处于匹配 pattern 的字符串的起始点的字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,‘Windows (?=95|98|NT|2000)’ 匹配"Windows 2000"中的"Windows",但不匹配"Windows 3.1"中的"Windows"。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。
(?!pattern) 执行反向预测先行搜索的子表达式,该表达式匹配不处于匹配 pattern 的字符串的起始点的搜索字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,‘Windows (?!95|98|NT|2000)’ 匹配"Windows 3.1"中的 “Windows”,但不匹配"Windows 2000"中的"Windows"。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。
x|y 匹配 xy。例如,‘z|food’ 匹配"z"或"food"。’(z|f)ood’ 匹配"zood"或"food"。
[xyz] 字符集。匹配包含的任一字符。例如,"[abc]“匹配"plain"中的"a”。
[^xyz] 反向字符集。匹配未包含的任何字符。例如,"[^abc]“匹配"plain"中"p”,“l”,“i”,“n”。
[a-z] 字符范围。匹配指定范围内的任何字符。例如,"[a-z]"匹配"a"到"z"范围内的任何小写字母。
[^a-z] 反向范围字符。匹配不在指定的范围内的任何字符。例如,"[^a-z]"匹配任何不在"a"到"z"范围内的任何字符。
\b 匹配一个字边界,即字与空格间的位置。例如,“er\b"匹配"never"中的"er”,但不匹配"verb"中的"er"。
\B 非字边界匹配。“er\B"匹配"verb"中的"er”,但不匹配"never"中的"er"。
\c_x_ 匹配 x 指示的控制字符。例如,\cM 匹配 Control-M 或回车符。x 的值必须在 A-Z 或 a-z 之间。如果不是这样,则假定 c 就是"c"字符本身。
\d 数字字符匹配。等效于 [0-9]。
\D 非数字字符匹配。等效于 [^0-9]。
\f 换页符匹配。等效于 \x0c 和 \cL。
\n 换行符匹配。等效于 \x0a 和 \cJ。
\r 匹配一个回车符。等效于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。
\S 匹配任何非空白字符。与 [^ \f\n\r\t\v] 等效。
\t 制表符匹配。与 \x09 和 \cI 等效。
\v 垂直制表符匹配。与 \x0b 和 \cK 等效。
\w 匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效。
\W 与任何非单词字符匹配。与"[^A-Za-z0-9_]"等效。
\x_n_ 匹配 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),ml 是八进制数 (0-7) 时,匹配八进制转义码 nml
\u_n_ 匹配 n,其中 n 是以四位十六进制数表示的 Unicode 字符。例如,\u00A9 匹配版权符

实例及描述:

正则表达式 描述
this is text 匹配字符串 “this is text”
this\s+is\s+text 注意字符串中的 \s+。匹配单词 “this” 后面的 \s+ 可以匹配多个空格,之后匹配 is 字符串,再之后 \s+ 匹配多个空格然后再跟上 text 字符串。可以匹配这个实例:this is text
^\d+(\.\d+)? ^ 定义了以什么开始\d+ 匹配一个或多个数字? 设置括号内的选项是可选的\. 匹配 "."可以匹配的实例:“5”, “1.5” 和 “2.21”。

代码示例

1.Pattern.complie(String regex)

Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式,
pattern() 返回正则表达式的字符串形式,其实就是返回Pattern.complile(String regex)的regex参数

        Pattern p=Pattern.compile("\\w+");String result=p.pattern();System.out.println(result);//\w+

2.Pattern.matches(String regex,CharSequence input)

  • 是一个静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串.
  • 在 Java 的正则表达式中,两个 \ 代表其他语言中的一个 ****,
  • \d即\d,数字字符匹配。等效于 [0-9]。
Pattern.matches("\\d+","2223");//返回true
Pattern.matches("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,这里aa不能匹配到
Pattern.matches("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,这里bb不能匹配到

注意

其实 Pattern.matcher(String regex,CharSequence input) 与 Pattern.compile(regex).matcher(input).matches() 等价
验证如下:

System.out.println(Pattern.matches("\\d+","2223") ==  Pattern.compile("\\d+").matcher("2223").matches());

3.Pattern.matcher(CharSequence input)

  • Pattern.matcher(CharSequence input)返回一个Matcher对象.
  • Matcher类的构造方法也是私有的,不能随意创建,**只能通过Pattern.matcher(CharSequence input)方法得到该类的实例. **
  • Pattern类只能做一些简单的匹配操作,要想得到更强更便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持.
Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("22bb23");
m.pattern();//返回p 也就是返回该Matcher对象是由哪个Pattern对象的创建的

4.Matcher.matches()/ Matcher.lookingAt()/ Matcher.find()

Matcher类提供三个匹配操作方法,三个方法均返回boolean类型,当匹配到时返回true,没匹配到则返回false
matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true

Pattern p=Pattern.compile("\\d+");\\即\d  等效于 [0-9]。
Matcher m=p.matcher("22bb23");
m.matches();//返回false,因为bb不能被\d+匹配,导致整个字符串匹配未成功. Matcher m2=p.matcher("2223");
m2.matches();//返回true,因为\d+匹配到了整个字符串

5.校验手机号

var res=/^(13[0-9]|14[0123456789]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test('18292400487');
console.log(res);
//        /^(13[0-9]|14[0123456789]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test('18292400487');
boolean res=Pattern.compile("^(13[0-9]|14[0123456789]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$").matcher("18292400487").matches();
System.out.println(res);

资料

https://www.cnblogs.com/ggjucheng/p/3423731.html
https://www.runoob.com/java/java-regular-expressions.html
https://www.cnblogs.com/liwendeboke/p/6027063.html

java正则表示式方法解析与示例相关推荐

  1. java xml stax_Java StAX解析器示例以读取XML文件

    java xml stax We can use Java StAX parser to read XML file. Java Streaming API for XML (Java StAX) p ...

  2. java中setid(),Java Process.setId方法代碼示例

    本文整理匯總了Java中org.activiti.bpmn.model.Process.setId方法的典型用法代碼示例.如果您正苦於以下問題:Java Process.setId方法的具體用法?Ja ...

  3. java createfile,Java Filer.createSourceFile方法代碼示例

    本文整理匯總了Java中javax.annotation.processing.Filer.createSourceFile方法的典型用法代碼示例.如果您正苦於以下問題:Java Filer.crea ...

  4. signature=6e522504557107558aa08bc03de24226,Java Signature.initVerify方法代碼示例

    本文整理匯總了Java中java.security.Signature.initVerify方法的典型用法代碼示例.如果您正苦於以下問題:Java Signature.initVerify方法的具體用 ...

  5. java中stopwatch,Java StopWatch.stop方法代碼示例

    本文整理匯總了Java中org.hsqldb.lib.StopWatch.stop方法的典型用法代碼示例.如果您正苦於以下問題:Java StopWatch.stop方法的具體用法?Java Stop ...

  6. java setmaxfilesize,Java ServletFileUpload.setFileSizeMax方法代碼示例

    本文整理匯總了Java中org.apache.commons.fileupload.servlet.ServletFileUpload.setFileSizeMax方法的典型用法代碼示例.如果您正苦於 ...

  7. java seteditable,Java TextField.setEditable方法代碼示例

    import java.awt.TextField; //導入方法依賴的package包/類 public void setupDBFields(String dbname) throws Excep ...

  8. java的splititeration,Java Spliterator.estimateSize方法代碼示例

    import java.util.Spliterator; //導入方法依賴的package包/類 private static void testSplitUntilNull(SplitNode e ...

  9. java fast math,Java FastMath.ceil方法代碼示例

    import com.jme3.math.FastMath; //導入方法依賴的package包/類 public Node makeBigBlock(String name, float w, fl ...

最新文章

  1. 汤家凤高等数学基础手写笔记-曲线与曲面积分
  2. [转载] 羽毛球——学打羽毛球 09 步法的基本概念
  3. PyTorch随笔-3
  4. AtCoder Regular Contest 061
  5. service get list一般规范
  6. innobackupex参数之 --throttle 限速这个值设置多少合理 原创
  7. [转载] Python 统计学习方法——kdTree实现K近邻搜索
  8. 关于vs2010调用python中Py_Initialize函数报错的原因
  9. 用户id oracle设置,Oracle中的架构,用户和功能ID
  10. PS更换照片底色的方法(红底变白底为例)
  11. allegro里面由于shape out of date
  12. Python实现求二阶行列式
  13. html的nofollow标签,HTML中的A标签的nofollow属性解读
  14. ORACLE中的INTERVAL
  15. Win10系统在哪里卸载软件
  16. HowToDoIt 开源框架爱好者组织发布第一份项目总结
  17. 画彩色斐波那契螺旋线
  18. 裴建瑞2021011195
  19. ceph-pg状态详解
  20. ubuntu工作站配置

热门文章

  1. 基于微信药店药品商城小程序系统设计与实现 开题报告
  2. drds的update使用
  3. 高企申报有哪些项目?
  4. Unity 输出360图片
  5. php 查看nts,查看php是ts还是nts的方法
  6. 恶搞php表情包,PS制作搞笑的金馆长表情或修改金馆长表情文字
  7. 我所学到的EC-1(个人学习总结,不能保证正确,欢迎大佬指正)
  8. sublime 3 build 3126 code ,压缩包在我的360企业云盘里,搜sublime
  9. 乡村振兴涉农区域全景综合安防监控解决方案
  10. 收藏!如何建设数据团队 | 2020年《顶级数据团队建设全景报告》重磅发布