2026/1/19 23:30:32
网站建设
项目流程
网站建设公司 html5模板,程序开发语言有哪些,免费排版网站,专业做网站的公司有哪些目录
Java正则表达式 1、正则表达式语法 1.1、基本的元字符1.2、数量元字符1.3、位置元字符1.4、特殊字符元字符1.5、回溯引用和前后查找1.6、大小写转换1.7、匹配模式 2、Java中的正则表达式 2.1、概述2.2、获取匹配位置2.3、捕获组 3、匹配单个字符 3.1、匹配纯文本3.2、匹配…目录Java正则表达式1、正则表达式语法1.1、基本的元字符1.2、数量元字符1.3、位置元字符1.4、特殊字符元字符1.5、回溯引用和前后查找1.6、大小写转换1.7、匹配模式2、Java中的正则表达式2.1、概述2.2、获取匹配位置2.3、捕获组3、匹配单个字符3.1、匹配纯文本3.2、匹配任意字符3.3、匹配特殊字符4、匹配一组字符4.1、匹配多个字符中的某一个4.2、利用字符集合区间4.3、取非匹配5、使用元字符5.1、对特殊字符进行转义5.2、匹配空白字符5.3、匹配特定的字符类别6、重复匹配6.1、有多少个匹配6.2、匹配的重复次数6.3、防止过度匹配7、位置匹配7.1、单词边界7.2、字符串边界7.3、分行匹配模式8、使用子表达式8.1、子表达式8.2、子表达式的嵌套9、回溯引用9.1、回溯引用匹配9.2、回溯引用在替换操作中的应用9.3、大小写转换10、前后查找10.1、向前查找10.2、向后查找10.3、向前查找和向后查找结合起来10.4、对前后查找取非Java正则表达式1、正则表达式语法1.1、基本的元字符元字符说明.匹配任意单个字符[]匹配字符集合中的一个字符[^]对字符集合求非-定义一个区间例如[A-Z]\对下一个字符转义1.2、数量元字符元字符说明*匹配前一个字符子表达式的零次或多次重复默认贪婪匹配*?*的懒惰匹配版本匹配前一个字符子表达式的一次或多次重复默认贪婪匹配?的懒惰匹配版本?匹配前一个字符子表达式的零次或一次重复{n}匹配前一个字符子表达式的n次重复{m, n}匹配前一个字符子表达式至少m次且至多n次重复{n, }匹配前一个字符子表达式n次或更多次重复{n, }?{n, }的懒惰匹配版本1.3、位置元字符元字符说明^匹配字符串的开头\A匹配字符串的开头$匹配字符串的结束\Z匹配字符串的结束\匹配单词的开头\匹配单词的结束\b匹配单词边界开头和结束\B\b的反义1.4、特殊字符元字符元字符说明[\b]退格字符\c匹配一个控制字符\d匹配任意数字字符\D\d的反义\f换页符\n换行符\r回车符\s匹配一个空白字符\t制表符Tab字符\v垂直制表符\w匹配任意字母数字字符或下划线字符\W\w的反义\x匹配一个十六进制数字\0匹配一个八进制数字1.5、回溯引用和前后查找元字符说明()定义一个子表达式\1匹配第1个子表达式\2表示第2个子表达式以此类推?向前查找?向后查找?!负向前查找?!负向后查找?()条件if then?()1.6、大小写转换元字符说明\E结束\L或\U转换\l把下一个字符转换位小写\L把后面的字符转换位小写直到遇见\E为止\u把下一个字符转换位大写\U把后面的字符转换位大写直到遇到\E为止1.7、匹配模式元字符说明(?m)分行匹配模式(?i)忽略大小写(?d)Unix行模式(?x)注释模式(?s)dotall模式(?u)将以与Unicode标准一致的方式进行大小写不敏感匹配2、Java中的正则表达式2.1、概述Java对正则表达式的支持是从1.4版本开始的此前的JRE版本不支持正则表达式。Java语言中的正则表达式匹配功能主要是通过java.util.regex.Matcher和java.util.regex.Pattern类实现的。Matcher类提供如下几个常用方法find()在一个字符串里寻找一个给定模式的匹配lookingAt()用一个给定的模式尝试匹配一个字符串的开头matches()用一个给定的模式去尝试匹配一个完整的字符串replaceAll()进行替换操作对所有的匹配都进行替换replaceFirst()进行替换操作只对第一个匹配进行替换Pattern类提供如下几个常用方法compile()把一个正则表达式编译成一个模式flags()返回某给定模式的匹配标志matches()在功能上等价于maches()方法pattern()把一个模式还原位一个正则表达式split()把一个字符串拆分位子字符串Java正则表达式支持与Perl语言基本兼容但要注意以下几点不支持嵌入条件不支持使用\E、\l、\L、\u和\U进行字母大小写转换不支持使用\b匹配退格符不支持\z2.2、获取匹配位置Matcher类提供了如下方法以获取匹配的位置public int start()返回以前匹配的初始索引public int start(int group)返回在以前的匹配操作期间由给定组所捕获的子序列的初始索引public int end()返回最后匹配字符之后的偏移量public int end(int group)返回在以前的匹配操作期间由给定组所捕获子序列的最后字符之后的偏移量String content hello edu jack tom hello smith hello fff; String reg hello; Pattern pattern Pattern.compile(reg); Matcher matcher pattern.matcher(content); StringBuffer buffer new StringBuffer(); while (matcher.find()) { System.out.println(); System.out.println(matcher.start()); System.out.println(matcher.end()); matcher.appendReplacement(buffer, ###); } matcher.appendTail(buffer); System.out.println(buffer.toString()); // // 0 // 5 // // 19 // 24 // // 31 // 36 // ### edu jack tom ### smith ### fff2.3、捕获组非命名捕获 (pattern)捕获匹配的子字符串。编号为零的第一个捕获是由整个正则表达式模式匹配的文本其它捕获结果则根据左括号的顺序从1开始自动编号。String content hanshunping s7789 nn1189han; String regStr (\\d\\d)(\\d\\d); Pattern pattern Pattern.compile(regStr); Matcher matcher pattern.matcher(content); while (matcher.find()) { System.out.println(matcher.group(0)); System.out.println(matcher.group(1)); System.out.println(matcher.group(2)); } // 7789 // 77 // 89 // 1189 // 11 // 89命名捕获 (?pattern)将匹配的子字符串捕获到一个组名称或编号名称中。用于name的字符串不能包含任何符号并且不能以数字开头。可以使用单引号代替尖括号。例如(?name)。String content hanshunping s7789 nn1189han; String regStr (?g1\\d\\d)(?g2\\d\\d); Pattern pattern Pattern.compile(regStr); Matcher matcher pattern.matcher(content); while (matcher.find()) { System.out.println(matcher.group(0)); System.out.println(matcher.group(g1)); System.out.println(matcher.group(g2)); } // 7789 // 77 // 89 // 1189 // 11 // 89非捕获匹配 (?:pattern)匹配pattern但不捕获该匹配的子表达式即它是一个非捕获匹配不存储以后使用的匹配。这对于用or字符(|)组合模式部件的情况很有用。例如industr(?:y|ies)是比’industry|industries’更经济的表达式。String content hello韩顺平教育 jack韩顺平老师 韩顺平同学hello; String regStr 韩顺平(?:教育|老师|同学); Pattern pattern Pattern.compile(regStr); Matcher matcher pattern.matcher(content); while (matcher.find()) { System.out.println(matcher.group(0)); // System.out.println(matcher.group(1));//错误并不会捕获分组 } // 韩顺平教育 // 韩顺平老师 // 韩顺平同学非捕获匹配 (?pattern)它是一个非捕获匹配。例如Windows(?95|98|NT|2000)匹配Windows 2000中的Windows但是不匹配Windows 3.1中的Windows。String content Windows2000 Windows3.1; String regStr Windows(?95|98|NT|2000); Pattern pattern Pattern.compile(regStr); Matcher matcher pattern.matcher(content); while (matcher.find()) { System.out.println(matcher.group(0)); // System.out.println(matcher.group(1));//错误并不会捕获分组 } String res matcher.replaceAll(); System.out.println(res); // Windows // 2000 Windows3.1非捕获匹配 (?!pattern)该表达式匹配不处于匹配pattern的字符串的起始点的搜索字符串。它是一个非捕获匹配。例如Windows (?!95|98|NT|2000)匹配Windows 3.1中的Windows但是不匹配Windows 2000中的Windows。String content Windows2000 Windows3.1; String regStr Windows(?!95|98|NT|2000); Pattern pattern Pattern.compile(regStr); Matcher matcher pattern.matcher(content); while (matcher.find()) { System.out.println(matcher.group(0)); // System.out.println(matcher.group(1));//错误并不会捕获分组 } String res matcher.replaceAll(); System.out.println(res); // Windows // Windows2000 3.13、匹配单个字符3.1、匹配纯文本有多个匹配结果使用全局匹配字母大小写使用i标志忽略大小写String str Hello, my name is Ben. \n Please visit my website at http:www.baidu.com.; //全局匹配 String pattern my; Pattern r Pattern.compile(pattern); Matcher m r.matcher(str); while (m.find()) { System.out.println(m.group()); } //忽略大小写 pattern h; r Pattern.compile(pattern, Pattern.CASE_INSENSITIVE); m r.matcher(str); while (m.find()) { System.out.println(m.group()); }3.2、匹配任意字符使用.匹配任意字符3.3、匹配特殊字符使用\转义字符4、匹配一组字符4.1、匹配多个字符中的某一个4.2、利用字符集合区间字符区间并不仅限于数字以下这些都是合法的字符区间:A-Z,匹配从A到Z的所有大写字母。a-z,匹配从a到z的所有小写字母。A-F,匹配从A到F的所有大写字母。A-z,匹配从ASCIⅡ字符A到ASCI字符z的所有字母。这个模式一般不常用因为它还包含着[和等在ASCI字符表里排列在Z和a之间的字符。4.3、取非匹配集合中使用^5、使用元字符5.1、对特殊字符进行转义5.2、匹配空白字符元字符说明[\b]回退并删除一个字符Backsace键\f换页符\n换行符\r回车符\t制表符(Tab键)\v垂直制表符5.3、匹配特定的字符类别元字符说明\d任何一个数字字符等价于[0-9]\D任何一个非数字字符等价于[^0-9]元字符说明\w任何一个字母数字字符大小写均可或下划线字符等价于[a-zA-Z0-9_]\W任何一个非字母数字或非下划线字符等价于[^a-zA-Z0-9_]元字符说明\s任何一个空白字符等价于[\f\n\r\t\v]\S任何一个非空白字符等价于[^\f\n\r\t\v]匹配十六进制(\x前缀)或八进制数值(\0前缀)\x0A对应于ASCII字符10换行符其效果等价于\n。6、重复匹配6.1、有多少个匹配使用匹配一个或多个字符使用*匹配零个或多个字符使用?匹配零个或一个字符6.2、匹配的重复次数使用{n}位重复匹配次数设定一个精确的值使用{m, n}位重复匹配次数设定一个区间使用{m,}匹配至少重复多少次6.3、防止过度匹配贪婪型元字符懒惰型元字符**??{n,}{n,}?贪婪匹配的结果将第一个B标签的开头和第二个B标签的结尾匹配为一对懒惰匹配的结果String str This offer is not available to customers living in BAK/B and BHI/B.; //贪婪匹配 String pattern [Bb].*/[Bb]; Pattern r Pattern.compile(pattern); Matcher m r.matcher(str); while (m.find()) { System.out.println(m.group()); } //懒惰匹配 pattern [Bb].*?/[Bb]; r Pattern.compile(pattern); m r.matcher(str); while (m.find()) { System.out.println(m.group()); }7、位置匹配7.1、单词边界使用\b来匹配一个单词的开始或结尾使用\B表明不匹配一个单词边界7.2、字符串边界使用^匹配字符串的开头$匹配字符串的结尾7.3、分行匹配模式使用(?m)启用分行匹配模式String str aaa\n aba\n aca\n bab\n cac; String pattern (?m)^a.*a$; Pattern r Pattern.compile(pattern); Matcher m r.matcher(str); while (m.find()) { System.out.println(m.group()); }8、使用子表达式8.1、子表达式子表达式是一个更大的表达式的一部分把一个表达式划分为一系列子表达式的目的是为了把那些子表达式当作一个独立元素来使用。子表达式必须用(和)括起来。8.2、子表达式的嵌套String str Pinging hog.forta.com [12.159.46.200] with 32 bytes of data:; String pattern (((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))\\.){3}((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5])); Pattern r Pattern.compile(pattern); Matcher m r.matcher(str); while (m.find()) { System.out.println(m.group()); }9、回溯引用9.1、回溯引用匹配使用\n来引用模式里的子表达式\1表示第一个子表达式\2表示第二个子表达式依次类推String str This is a block of of text,\n several words here are are\n repeated, and and they\n should not be.; String pattern [ ](\\w)[ ]\\1; Pattern r Pattern.compile(pattern); Matcher m r.matcher(str); while (m.find()) { System.out.println(m.group()); }9.2、回溯引用在替换操作中的应用替换操作需要用到两个正则表达式一个用来给出搜索模式另一个用来给出匹配文本的替换模式。回溯引用可以跨模式使用在第一个模式里被匹配的子表达式可以用在第二个模式里。匹配到了邮箱地址先把邮箱地址放在A标签中# 替换$1引用子表达式 a herfmailto:$1$1/a结果Hello, a herfmailto:benforta.combenforta.com/a is my email address.Java实现String str Hello, benforta.com is my email address.; String pattern (\\w[\\w\\.]*[\\w\\.]\\.\\w); Pattern r Pattern.compile(pattern); Matcher m r.matcher(str); String res m.replaceAll(a herf\mailto:$1\$1/a); System.out.println(res);//Hello, a herfmailto:benforta.combenforta.com/a is my email address.9.3、大小写转换元字符说明\E结束\L或\U转换\l把下一个字符转换位小写\L把后面的字符转换位小写直到遇见\E为止\u把下一个字符转换位大写\U把后面的字符转换位大写直到遇到\E为止把一级标题中的文本转换为大写替换$1\U$2\E$3结果BODY H1WELCOME TO MY HOMEPAGE/H1 H2Coldfusion/H2 H2Wireless/H2 H2This is not valid HTML/H3 /BODY注意Java并不支持此种大小写转换10、前后查找10.1、向前查找向前查找指定了一个必须匹配但不在结果中返回的模式。向前查找实际就是一个子表达式而且从格式上看也确实如此。从语法上看一个向前查找模式其实就是一个以?开头的子表达式需要匹配的文本跟在的后面。在上面列出的URL地址里协议名与主机名之间以一个分隔。模式.匹配任意文本第1个匹配是http),子表达式()匹配。注意被匹配到的并没有出现在最终的匹配结果里我们用向正则表达式引擎表明只要找到就行了不要把它包括在最终的匹配结果里用术语来说就是“不消费”它。String str http://www.forta.com/\n https://mail.forta.com/\n ftp://ftp.forta.com/; String pattern .(?:); Pattern r Pattern.compile(pattern); Matcher m r.matcher(str); while (m.find()) { System.out.println(m.group()); }10.2、向后查找正如你刚看到的那样将向前查找查找出现在被匹配文本之后的字符但不消费那个字符)。因此被称为向前查找操作符。除了向前查找许多正则表达式实现还支持向后查找也就是查找出现在被匹配文本之前的字符但不消费它向后查找操作符是?。?与?的具体使用方法大同小异它必须用在一个子表达式里而且后跟要匹配的文本。String str ABC01: $23.45\n HGG42: $5.31\n CFMX1: $899.00\n XTC99: $68.96\n Total items found: 4; String pattern (?\\$)[0-9.]; Pattern r Pattern.compile(pattern); Matcher m r.matcher(str); while (m.find()) { System.out.println(m.group()); } // 23.45 // 5.31 // 899.00 // 68.96(?\$)只匹配$但不消费它最终的匹配结果里只有价格数字没有前缀$字符。10.3、向前查找和向后查找结合起来String str HEAD\n TITLEBen Fortas Homepage/TITLE\n /HEAD; String pattern (?[tT][iI][tT][lL][eE]).*(?/[tT][iI][tT][lL][eE]); Pattern r Pattern.compile(pattern); Matcher m r.matcher(str); while (m.find()) { System.out.println(m.group()); //Ben Fortas Homepage }10.4、对前后查找取非前后查找还有一种不太常见的用法叫作负前后查找(negative lookaround)。负向前查找(negative lookahead)将向前查找不与给定模式相匹配的文本负向后查找(negative lookbehind)将向后查找不与给定模式相匹配的文本。操作符说明(?)正向前查找(?!)负向前查找(?)正向后查找(?!)负向后查找String str I paid $30 for 100 apples,\n 50 oranges, and 60 pears.\n I saved $5 on this order.; //只查找数量负向后查找匹配结果只包含那些不以$开头的数值 String pattern \\b(?!\\$)\\d\\b; Pattern r Pattern.compile(pattern); Matcher m r.matcher(str); while (m.find()) { System.out.println(m.group()); }说真的这两年看着身边一个个搞Java、C、前端、数据、架构的开始卷大模型挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis稳稳当当过日子。结果GPT、DeepSeek火了之后整条线上的人都开始有点慌了大家都在想“我是不是要学大模型不然这饭碗还能保多久”先给出最直接的答案一定要把现有的技术和大模型结合起来而不是抛弃你们现有技术掌握AI能力的Java工程师比纯Java岗要吃香的多。即使现在裁员、降薪、团队解散的比比皆是……但后续的趋势一定是AI应用落地大模型方向才是实现职业升级、提升薪资待遇的绝佳机遇如何学习AGI大模型作为一名热心肠的互联网老兵我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。因篇幅有限仅展示部分资料需要点击下方链接即可前往获取2025最新版CSDN大礼包《AGI大模型学习资源包》免费分享**一、2025最新大模型学习路线一个明确的学习路线可以帮助新人了解从哪里开始按照什么顺序学习以及需要掌握哪些知识点。大模型领域涉及的知识点非常广泛没有明确的学习路线可能会导致新人感到迷茫不知道应该专注于哪些内容。我们把学习路线分成L1到L4四个阶段一步步带你从入门到进阶从理论到实战。L1级别:AI大模型时代的华丽登场L1阶段我们会去了解大模型的基础知识以及大模型在各个行业的应用和分析学习理解大模型的核心原理关键技术以及大模型应用场景通过理论原理结合多个项目实战从提示工程基础到提示工程进阶掌握Prompt提示工程。L2级别AI大模型RAG应用开发工程L2阶段是我们的AI大模型RAG应用开发工程我们会去学习RAG检索增强生成包括Naive RAG、Advanced-RAG以及RAG性能评估还有GraphRAG在内的多个RAG热门项目的分析。L3级别大模型Agent应用架构进阶实践L3阶段大模型Agent应用架构进阶实现我们会去学习LangChain、 LIamaIndex框架也会学习到AutoGPT、 MetaGPT等多Agent系统打造我们自己的Agent智能体同时还可以学习到包括Coze、Dify在内的可视化工具的使用。L4级别大模型微调与私有化部署L4阶段大模型的微调和私有化部署我们会更加深入的探讨Transformer架构学习大模型的微调技术利用DeepSpeed、Lamam Factory等工具快速进行模型微调并通过Ollama、vLLM等推理部署框架实现模型的快速部署。整个大模型学习路线L1主要是对大模型的理论基础、生态以及提示词他的一个学习掌握而L3 L4更多的是通过项目实战来掌握大模型的应用开发针对以上大模型的学习路线我们也整理了对应的学习视频教程和配套的学习资料。二、大模型经典PDF书籍书籍和学习文档资料是学习大模型过程中必不可少的我们精选了一系列深入探讨大模型技术的书籍和学习文档它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。书籍含电子版PDF三、大模型视频教程对于很多自学或者没有基础的同学来说书籍这些纯文字类的学习教材会觉得比较晦涩难以理解因此我们提供了丰富的大模型视频教程以动态、形象的方式展示技术概念帮助你更快、更轻松地掌握核心知识。四、大模型项目实战学以致用当你的理论知识积累到一定程度就需要通过项目实战在实际操作中检验和巩固你所学到的知识同时为你找工作和职业发展打下坚实的基础。五、大模型面试题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我们将提供精心整理的大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。因篇幅有限仅展示部分资料需要点击下方链接即可前往获取2025最新版CSDN大礼包《AGI大模型学习资源包》免费分享