正则表达式的构造摘要(1)

*

零次或多次匹配前面的字符或子表达式。例如,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}

M 和 n 是非负整数,其中 n 《= m。匹配至少 n 次,至多 m 次。例如,“o{1,3}”匹配“fooooood”中的头三个 o。‘o{0,1}’ 等效于 ‘o?’。注意:您不能将空格插入逗号和数字之间。

当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串“oooo”中,“o+?”只匹配单个“o”,而“o+”匹配所有 “o”。

匹配除“/n”之外的任何单个字符。若要匹配包括“/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

匹配 x 或 y。例如,’z|food‘ 匹配“z”或“food”。’(z|f)ood‘ 匹配“zood”或“food”。

[xyz]

字符集。匹配包含的任一字符。例如,“[abc]”匹配“plain”中的“a”。

package regexp; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestRegexp { public static void main(String[] args) { //简单认识正则表达试的概念; // p(“abc”.matches(“…”)); // p(“a8588a”.replaceAll(“//d”, “-”)); // //三句话效率高; // Pattern p=Pattern.compile(“[a-z]{3}”); // Matcher m= p.matcher(“fgh”); // p(m.matches()); // p(“fgha”.matches(“[a-z]{3}”)); //初步认识 ;* + ? // p(“aa”.matches(“.a”)); // p(“A”.matches(“[ABC]”)); // p(“//”.matches(“”)); // // p(“hello sir”.matches(“^h.*”)); // p(“hello sir”.matches(“.*ir$”)); // p(“hello sir”.matches(“^h[a-z]{1,2}o.*”)); // p(“aaa8888c”.matches(“.*//d{4}.”)); // //匹配emil正则表达式 // p(“381186704@163.com”.matches(“[//w[.-]]+@[//w[.-]]+//.[//w]+”)); // /*Pattern p=Pattern.compile(“java”,Pattern.CASE_INSENSITIVE); Matcher m=p.matcher(“java Java JAVa JaVa IloveJAVA hae Java123456”);; StringBuffer buf=new StringBuffer(); int i=0; while(m.find()){ if(i%2==0) m.appendReplacement(buf, “java”); else m.appendReplacement(buf, “JAVA”); i++; } m.appendTail(buf); p(buf);*/ // p(m.replaceAll(“java”)); p(“----------------------Possessive Reluctant “); Pattern p2=Pattern.compile(”(.{3,10}?)[0-9]”); String s2=“aaaa5bbbb6”; Matcher m2=p2.matcher(s2); if(m2.find()) p(m2.start()+“-”+m2.end()); else p(“not match”); p(“----------------------back refenrences”); Pattern p3=Pattern.compile(“(//d(//d))//2”); String s3=“122”; Matcher m3= p3.matcher(s3); p(m3.matches()); } public static void p(Object o){ System.out.println(o); } }

非捕获组

| 构造 | 匹配 |

| :-- | :-- |

|   |

| 字符 |

| x | 字符 x |

| // | 反斜线字符 |

| /0_n_ | 带有八进制值 0 的字符 n (0 <= n <= 7) |

| /0_nn_ | 带有八进制值 0 的字符 nn (0 <= n <= 7) |

| /0_mnn_ | 带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7) |

| /x_hh_ | 带有十六进制值 0x 的字符 hh |

| /u_hhhh_ | 带有十六进制值 0x 的字符 hhhh |

| /t | 制表符 (‘/u0009’) |

| /n | 新行(换行)符 (‘/u000A’) |

| /r | 回车符 (‘/u000D’) |

| /f | 换页符 (‘/u000C’) |

| /a | 报警 (bell) 符 (‘/u0007’) |

| /e | 转义符 (‘/u001B’) |

| /c_x_ | 对应于 x 的控制符 |

|   |

| 字符类 |

| [abc] | a、b 或 c(简单类) |

| [^abc] | 任何字符,除了 a、b 或 c(否定) |

| [a-zA-Z] | a 到 z 或 A 到 Z,两头的字母包括在内(范围) |

| [a-d[m-p]] | a 到 d 或 m 到 p:[a-dm-p](并集) |

| [a-z&&[def]] | d、e 或 f(交集) |

| [a-z&&[^bc]] | a 到 z,除了 b 和 c:[ad-z](减去) |

| [a-z&&[^m-p]] | a 到 z,而非 m 到 p:[a-lq-z](减去) |

|   |

| 预定义字符类 |

| . | 任何字符(与行结束符可能匹配也可能不匹配) |

| /d | 数字:[0-9] |

| /D | 非数字: [^0-9] |

| /s | 空白字符:[ /t/n/x0B/f/r] |

| /S | 非空白字符:[^/s] |

| /w | 单词字符:[a-zA-Z_0-9] |

| /W | 非单词字符:[^/w] |

|   |

| POSIX 字符类(仅 US-ASCII) |

| /p{Lower} | 小写字母字符:[a-z] |

| /p{Upper} | 大写字母字符:[A-Z] |

| /p{ASCII} | 所有 ASCII:[/x00-/x7F] |

| /p{Alpha} | 字母字符:[/p{Lower}/p{Upper}] |

| /p{Digit} | 十进制数字:[0-9] |

| /p{Alnum} | 字母数字字符:[/p{Alpha}/p{Digit}] |

| /p{Punct} | 标点符号:!"#$%&'()*+,-./:;<=>?@[/]^_`{|}~ |

| /p{Graph} | 可见字符:[/p{Alnum}/p{Punct}] |

| /p{Print} | 可打印字符:[/p{Graph}/x20] |

| /p{Blank} | 空格或制表符:[ /t] |

| /p{Cntrl} | 控制字符:[/x00-/x1F/x7F] |

| /p{XDigit} | 十六进制数字:[0-9a-fA-F] |

| /p{Space} | 空白字符:[ /t/n/x0B/f/r] |

|   |

| java.lang.Character 类(简单的 java 字符类型) |

| /p{javaLowerCase} | 等效于 java.lang.Character.isLowerCase() |

| /p{javaUpperCase} | 等效于 java.lang.Character.isUpperCase() |

| /p{javaWhitespace} | 等效于 java.lang.Character.isWhitespace() |

| /p{javaMirrored} | 等效于 java.lang.Character.isMirrored() |

|   |

| Unicode 块和类别的类 |

| /p{InGreek} | Greek 块(简单块)中的字符 |

| /p{Lu} | 大写字母(简单类别) |

| /p{Sc} | 货币符号 |

| /P{InGreek} | 所有字符,Greek 块中的除外(否定) |

| [/p{L}&&[^/p{Lu}]] | 所有字母,大写字母除外(减去) |

|   |

| 边界匹配器 |

| ^ | 行的开头 |

| $ | 行的结尾 |

| /b |

单词边界,匹配的只是一个位置,这个位置的一侧是构成单词的字符,另一侧为非单词字符、字符串的开始或结束位置。“/b”是零宽度的。

|

| /B | 非单词边界 |

| /A | 输入的开头 |

| /G | 上一个匹配的结尾 |

| /Z | 输入的结尾,仅用于最后的结束符(如果有的话) |

| /z | 输入的结尾 |

|   |

| Greedy 数量词 |

| X? | X,一次或一次也没有 |

| X* | X,零次或多次 |

| X+ | X,一次或多次 |

| X{n} | X,恰好 n 次 |

| X{n,} | X,至少 n 次 |

| X{n,m} | X,至少 n 次,但是不超过 m 次 |

最后

以前一直是自己在网上东平西凑的找,找到的东西也是零零散散,很多时候都是看着看着就没了,时间浪费了,问题却还没得到解决,很让人抓狂。

后面我就自己整理了一套资料,还别说,真香!

资料有条理,有系统,还很全面,我不方便直接放出来,大家可以先看看有没有用得到的地方吧。

系列教程图片

2020Android复习资料汇总.png

flutter

NDK

设计思想开源框架

微信小程序
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
[外链图片转存中…(img-o1m6Mjlm-1715333182207)]

[外链图片转存中…(img-84qK0bIn-1715333182208)]

[外链图片转存中…(img-QqQYGn2A-1715333182208)]

[外链图片转存中…(img-NeCRXd9M-1715333182209)]

[外链图片转存中…(img-L9rgUQEf-1715333182210)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值