Java正则表达式之从入门到精通[z]

from:www.linuxpk.com/43583.html

  如果原来没有使用过正则表达式,那么可能对这个术语和概念会不太熟悉。不过,它们并不是您想象的那么新奇。

  请回想一下在硬盘上是如何查找文件的。您肯定会使用 ? 和 * 字符来帮助查找您正寻找的文件。? 字符匹配文件名中的单个字符,而 * 则匹配一个或多个字符。一个如 'data?.dat' 的模式可以找到下述文件:

  data1.dat

  data2.dat

  datax.dat

  dataN.dat

  如果使用 * 字符代替 ? 字符,则将扩大找到的文件数量。'data*.dat' 可以匹配下述所有文件名:

  data.dat

  data1.dat

  data2.dat

  data12.dat

  datax.dat

  dataXYZ.dat

  尽管这种搜索文件的方法肯定很有用,但也十分有限。? 和 * 通配符的有限能力可以使你对正则表达式能做什么有一个概念,不过正则表达式的功能更强大,也更灵活。

  -------------------------------------------------------

  2.早期起源

  早期起源

  正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。

  1956 年, 一位叫 Stephen Kleene 的美国数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。

  随后,发现可以将这一工作应用于使用Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson是Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的qed 编辑器。

  如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。

  --------------------------------------------------------

  3.使用正则表达式

  在典型的搜索和替换操作中,必须提供要查找的确切文字。这种技术对于静态文本中的简单搜索和替换任务可能足够了,但是由于它缺乏灵活性,因此在搜索动态文本时就有困难了,甚至是不可能的。

  使用正则表达式,就可以:

  1.测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。

  2.替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。

  3.根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。

  例如,如果需要搜索整个 web 站点来删除某些过时的材料并替换某些HTML 格式化标记,则可以使用正则表达式对每个文件进行测试,看在该文件中是否存在所要查找的材料或 HTML 格式化标记。用这个方法,就可以将受影响的文件范围缩小到包含要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料,最后,可以再次使用正则表达式来查找并替换那些需要替换的标记。

  另一个说明正则表达式非常有用的示例是一种其字符串处理能力还不为人所知的语言。VBScript 是 Visual Basic 的一个子集,具有丰富的字符串处理功能。与 C 类似的 Visual Basic Scripting Edition 则没有这一能力。正则表达式给 Visual Basic Scripting Edition 的字符串处理能力带来了明显改善。不过,可能还是在 VBScript 中使用正则表达式的效率更高,它允许在单个表达式中执行多个字符串操作

  4.正则表达式语法

  一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

  这里有一些可能会遇到的正则表达式示例:

  Visual BasicVBScript匹配 Scripting Edition

  /^\[ \t]*$/chr(34)^\[ \t]*$chr(34)匹配一个空白行。

  /\d{2}-\d{5}/chr(34)\d{2}-\d{5}chr(34)验证一个ID号码是否由一个2位字,一

  个连字符以及一个5位数字组成。

  /<(.*)>.*<\/\1>/chr(34)<(.*)>.*<\/\1>chr(34)匹配一个 HTML 标记。

  下表是元字符及其在正则表达式上下文中的行为的一个完整列表:

  字符描述

  \将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后向引用、或一个八进制转义符。例如,'n' 匹配字符 chr(34)nchr(34)。'\n' 匹配一个换行符。序列 '\\' 匹配 chr(34)\chr(34) 而 chr(34)\(chr(34) 则匹配 chr(34)(chr(34)。

  ^匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。

  $匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。

  *匹配前面的子表达式零次或多次。例如,zo* 能匹配 chr(34)zchr(34) 以及chr(34)zoochr(34)。 * 等价于{0,}。

  +匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 chr(34)zochr(34) 以及 chr(34)zoochr(34),但不能匹配 chr(34)zchr(34)。+ 等价于 {1,}。

  ?匹配前面的子表达式零次或一次。例如,chr(34)do(es)?chr(34) 可以匹配chr(34)dochr(34) 或 chr(34)doeschr(34) 中的chr(34)dochr(34) 。? 等价于 {0,1}。

  {n}n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配

  chr(34)Bobchr(34) 中的 'o',但是能匹配 chr(34)foodchr(34) 中的两个 o。

  {n,}n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 chr(34)Bobchr(34) 中的 'o',但能匹配 chr(34)fooooodchr(34) 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。

  {n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。刘, chr(34)o{1,3}chr(34) 将匹配 chr(34)foooooodchr(34) 中的前三个o。'o{0,1}'等价于'o?'。请注意在逗号和两个数之间不能有空格

  ?当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,},{n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的 匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 chr(34)oooochr(34),'o+?' 将匹配单个 chr(34)ochr(34),而 'o+' 将匹配所有 'o'。

  .匹配除 chr(34)\nchr(34) 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。

  (pattern)匹配pattern 并获取这一匹配。所获取的匹配可以从产生的Matches 集合得到,在VBScript 中使用 SubMatches 集合,在Visual Basic Scripting Edition 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。

  (?:pattern)匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 chr(34)或chr(34) 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。

  (?=pattern)正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配chr(34)Windows 2000chr(34)中的chr(34)Windowschr(34),但不能匹配chr(34)Windows3 .1chr(34)中chr(34)Windowschr(34)。

  预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

  (?!pattern)负向预查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows(?!95|98|NT|2000)' 能匹配 chr(34)Windows 3.1chr(34) 中的 chr(34)Windowschr(34),但不能匹配 chr(34)Windows 2000chr(34) 中的 chr(34)Windowschr(34)。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始

  x|y匹配 x 或 y。例如,'z|food' 能匹配 chr(34)zchr(34) 或 chr(34)foodchr(34)。'(z|f)ood' 则匹配 chr(34)zoodchr(34) 或 chr(34)foodchr(34)。

  [xyz]字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 chr(34)plainchr(34) 中的 'a'。

  [^xyz]负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 chr(34)plainchr(34) 中的'p'。

  [a-z]字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。

  [^a-z]负值字符范围。匹配任何不在指定范围内的任意字符。例如, '[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。

  \b匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配chr(34)neverchr(34) 中的 'er',但不能匹配 chr(34)verbchr(34) 中的 'er'。

  \B匹配非单词边界。'er\B' 能匹配 chr(34)verbchr(34) 中的 'er

正则表达式教程——从入门到精通 正则表达式(Regular Expression)是一种文本模式匹配的规则,它可以用来检查一个字符串是否与某种模式匹配,从而进行搜索或替换的操作。这一功能使得很多自动化处理任务变得简单易行。比如在搜索文件或日志时,就可以使用正则表达式来快速定位需要的信息。本文将以初中学生的知识水平作为读者对象,带领大家学习并掌握正则表达式的基础知识、语法和常用工具。并且给出相应的代码实例,帮助读者理解正则表达式的用法。 阅读详情

相关推荐

java正则表达式从入门到精通

如果在XP下运行,正则表达式.exe需要安装环境包。 找不到的或者有任何使用问题可以留邮箱给我。

【Java正则表达式】从入门到精通:语法解析与实战技巧

正则表达式是文本处理的利器,Java通过java.util.regex包提供了强大的支持。本文将带你系统学习Java正则表达式的核心语法、常用方法及实战技巧,助你轻松应对字符串匹配、验证和提取等需求!

xiaoyu❅的博客 918

Nginx健康检查实战:如何用第三方模块提升服务可用性(附详细配置)

本文深入探讨了如何通过集成第三方健康检查模块来提升Nginx的服务可用性。文章对比了Nginx默认被动检查的局限性,并详细介绍了主动健康检查的核心优势、主流模块选型,以及以nginx_upstream_check_module为例的实战部署与配置指南,帮助运维人员构建更可靠的负载均衡架构。

weixin_28331555的博客 308

正则表达式的快速入门及知识梳理(Java篇)

一个正在学正则表达式的程序员千万不要错过的一篇好文

wwx1255413402的博客 1182

如何在SendWS实现WhatsApp批量群发设置管理?WhatsApp群发超链有什么好处?

WhatsApp群发顾名思义就是对WhatsApp上的用户好友进行群发消息,给他们群发想要发送的消息。及时不认识对方也可以对他进行群发超链。越来越多做跨境出海运营的工作者利用WhatsApp进行营销推广,因为他能做到低成本高回报,向客户发送消息曝光自己的品牌或产品,使得更多人了解,拓展新客户,提高成交率。

SendWS-WS云控群控拓客聊天翻译 1169

微信聊天记录丢失原因与恢复方案详解

SQLite数据库作为移动应用常见的本地存储方案,其加密机制和存储结构直接影响数据安全性。以微信为例,聊天记录存储在EnMicroMsg.db等SQLite文件中,采用AES加密保护。当手机清理工具误删这些文件时,会导致特定时间段记录丢失。理解数据恢复原理需要掌握文件系统删除机制和闪存特性,其中关键点包括TRIM指令的影响和数据块覆盖风险。通过专业工具如DiskDigger或iMyFone D-Back,配合ADB调试和SQLite数据重组技术,可在黄金时间窗口内恢复记录。日常维护建议结合自动化备份方案和存

weixin_32612263的博客 386

Java学习教程,从入门到精通,Java 正则表达式知识点及案例代码(120)

正则表达式(Regular Expression,简称 regex)是一种用于描述字符串模式的强大工具。它可以用来进行字符串的匹配、查找、替换等操作。Java 提供了 `java.util.regex` 包来支持正则表达式。

qq_45746668的博客 1097

DNA pull-down技术避坑指南:从探针设计到质谱验证的完整实验方案

本文提供了一份详尽的DNA pull-down技术实战避坑指南,涵盖从探针设计、生物素标记、磁珠选择与预处理,到结合洗脱优化及下游质谱验证或Western Blot验证的全流程。重点解析了如何通过精细操作降低非特异性结合、提高实验特异性与重复性,并对比了质谱与WB两种验证路径的适用场景,旨在帮助研究者构建稳健可靠的DNA-蛋白质互作研究体系。

weixin_29274337的博客 495

《Java基础篇-从入门到精通》

本视频课程主要包括Java基础、数组和字符串、面向对象基础、面向对象基础、集合、异常、数据流、线程、网络等

链路状态路由协议 OSPF (一)

本章将会学习链路状态路由协议OSPF,理解OSPF的基本概念,工作原理,掌握OSPF配置基本命令。本章重点,OSPF的基本概念,OSPF配置。

yj11290301的博客 3475

无人机导航中的坐标系统详解与转换实现

本文系统介绍了无人机导航中常用的坐标系及其转换方法。主要内容包括:1) 四种关键坐标系(大地坐标系ECEF、经纬度LLA、北东天坐标系NED、机体坐标系)的定义和特点;2) 坐标系间的转换原理与实现,重点讲解LLA与ECEF的互转公式及ECEF与NED的转换方法;3) 提供可直接使用的C++实现代码,包括基于WGS84椭球模型的精确转换算法。这些内容为无人机导航系统开发提供了实用的坐标系处理方案,能够有效解决多源数据在不同坐标系下的统一表示问题。

电脑管家 377

Java 正则表达式之从入门到精通

Java 正则表达式之从入门到精通关键词: 正则表达式语法   如果原来没有使用过正则表达式,那么可能对这个术语和概念会不太熟悉。不过,它们并不是您想象的那么新奇。    请回想一下在硬盘上是如何查找文件的。您肯定会使用 ? 和 * 字符来帮助查找您

403

ReAct框架到多智能体协作:OpenClaw任务分解机制的演进与突破

AI的最终价值是落地,是帮用户解决实际问题,而不是停留在聊天界面里。从ReAct框架到多智能体协作,OpenClaw的任务分解体系走了一条非常务实的路线:所有的优化都是为了解决真实场景里的痛点,所有的设计都是为了让用户用起来更省心。很多人说现在的AI还是“人工智障”,那是因为他们没有用到真正能落地的AI产品。当你用过OpenClaw,体验过你说一句话它就能把一整套复杂任务全都做完的感觉,你就会明白:AI代替人做重复性工作的时代,已经真的来了。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 311

掌握正则表达式:从入门到精通的实战指南

为什么学习正则表达式,底层是怎么实现的,可以给我们解决什么问题,本篇文章带你学习正则表达式的魅力

qq_74232707的博客 3073

beegfs读取文件完整流程分析

读取小于512KB文件数据,小于1s 读取15MB文件数据,花费7秒。

wfzy的博客 835

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java正则表达式从入门到精通

正则表达式(Regular Expression,简称Regex)是一种强大的文本处理工具,它使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在Java中,正则表达式广泛应用于字符串处理、文件匹配、数据验证等领域。本文将带你从入门到精通Java正则表达式。一、正则表达式的基本概念。四、正则表达式的常用场景。

csbysj2020 648

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java中的正则表达式:从入门到精通的秘籍

正则表达式(Regular Expression,简称regex)是一种用于匹配字符串模式的工具。在Java中,正则表达式被广泛应用于字符串的搜索、替换和分割操作。简单来说,正则表达式就是用一系列特殊符号来描述字符模式的强大工具。

weixin_46372265的博客 933

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

正则表达式边界符中的 ^, $, \A, \Z, \z

转载自 http://blog.youkuaiyun.com/ggicci/article/details/8015087 Regex : 本文介绍正则表达式中边界符 ^ 和 $ 以及 \A 和 \Z, \z 的比较和用法 本文的正则表达式在 Java 中测试 本文的一些概念关键词以          高亮标出,正则表达式以           高亮标出 State : 这个是在 Java

stepup 2万+

Java正则表达式入门

Java正则表达式入门

aabbyyz的博客 1790

HoRain云--Java正则表达式:从入门到精通

本文介绍了正则表达式的基础概念和在Java中的应用,包括字符类、数量词、边界匹配、分组等核心语法。详细讲解了Java中Pattern、Matcher类的使用以及String类提供的正则相关方法。还介绍了反向引用、环视等高级功能,并提供了正则表达式优化建议。文章强调通过实践来掌握正则表达式,建议使用在线练习平台提升技能,同时注意代码可读性和性能优化。最后鼓励读者持续学习,不断提高正则表达式的应用能力。

2401_86544677的博客 743

Java正则表达式从入门到精通:基础详解与实战进阶

正则表达式(Regular Expression)是一种基于特定语法规则的文本模式匹配工具,广泛应用于字符串验证、文本替换、数据提取等场景。在Java中,正则表达式通过java.util.regex包实现,核心类为Pattern和Matcher。

2401_86544677的博客 1223

Java——正则表达式详解_java正则表达式,零基础入门到精通,收藏这篇就够了

Java对正则表达式的支持是从1.4版本开始的,此前的JRE版本不支持正则表达式。Java语言中的正则表达式匹配功能主要是通过和类实现的。find():在一个字符串里寻找一个给定模式的匹配:用一个给定的模式尝试匹配一个字符串的开头matches():用一个给定的模式去尝试匹配一个完整的字符串:进行替换操作,对所有的匹配都进行替换:进行替换操作,只对第一个匹配进行替换compile():把一个正则表达式编译成一个模式flags():返回某给定模式的匹配标志matches()

Javachichi的博客 811

java正则表达式语法大全,零基础入门到精通,收藏这篇就够了

n?b??{n,m}?

Javachichi的博客 943

正则表达式:从入门到精通

正则表达式(Regex)是一种强大的文本处理工具,广泛应用于表单验证、数据清洗、日志分析等场景。它通过特殊符号组合描述匹配规则,核心语法包括元字符(如.、\d)、量词(如*、{n})、字符类([])、分组(())和断言((?=))。典型应用包括校验手机号(^1[3-9]\d{9}$)、提取特定格式文本、批量替换内容等。掌握正则表达式能显著提升文本处理效率,是开发者必备技能之一。

2502_92311356的博客 996
上一篇: Google 的疯狂面试题[z]
下一篇: 日常技巧总结
liudaoru
博客等级 码龄18年 5粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值