正则表达式用处挺广的,主要用于处理字符串。

正则引擎

想要在计算机语言中使用正则表达式,那么这门计算机语言必须要利用正则引擎去实现相应的正则库。主要的正则引擎分为以下两类:

  • DFA 确定性的状态机。不使用”回溯”,效率高,但是支持的正则表达式语法有限。
  • NFA 非确定性状态机。构造简单,使用”回溯算法”,支持大多数的正则语法,是目前使用最广泛的正则引擎,大多数计算机语言例如Java、PHP、Ruby、Python等都是使用的NFA正则引擎。

语言实现

不同的语言对正则的实现不同,暴露出来的方法也不同,但方法的作用其实都是大同小异,这里用PHP语言做例子。

匹配字符串

  • preg_match(string $pattern, string $subject[, array &$matches]) 使用很频繁。函数返回匹配到的结果的次数。只匹配一次,参数matches只返回第一条结果。
  • preg_match_all(string $pattern, string $subject[, array &$matches]) 使用很频繁。函数返回匹配到的结果的次数。参数matches只返回所有结果。

替换字符串或数组

  • preg_replace($pattern, $replacement, $subject) 返回匹配过滤后的字符串或者数组。
  • preg_filter($pattern, $replacement, $subject)返回匹配过滤后的字符串或者数组。

这俩函数,都可以替换字符串,在字符串替换中,俩函数用法完全一致。

这俩函数,不仅可以替换字符串,还可以替换数组!在替换数组的时候,pre_filter会过滤掉没有匹配到的内容,而pre_replace不会,这就是他俩的唯一区别。

替换数组

  • preg_grep(string $pattern, array $input[, int flags = 0]) 返回匹配模式的数组条目。阉割版本的preg_filter

正则运算符转义

对一个字符串中的正则表达式的运算符:”. + * ? [ ] ^ $ ( ) { } = ! < > | : -“进行转义,转义成非正则表达式的运算符,否则正则表达式会认为其为运算符。

  • preg_quote(string $str[, string $delimiter = null ]) 转义正则表达式字符串。返回转义后的字符串。

正则表达式语法

你可以把正则表达式当做一门简单的语言来看,但是它的语法显然比一般的计算机语言要简单一些。

界定符

指定正则表达式的开始和结束,可以当成是计算机语言中的大括号{和}。一般有三种表现方式:

  • 斜杠。例如/[0-9]/。这是最常用的方式,在PHP中,推荐使用这种方式。
  • 井号。例如#[0-9]。
  • 大括号。例如{[0-9]}。在正则表达式中,大括号还有其他作用,所以这种方式不推荐使用。

原子

正则表达式中最小的匹配单位,其实就是字符串中的字符。主要分为两大类:

可见原子:

肉眼能够看见的字符。

  • 标点符号。例如:”_ ? . ;,“等等
  • 英文字母数字。例如:”a-z,A-Z,0-9“
  • 汉字、日文、阿拉伯文等其他语言文字
  • 数理化公式符号。例如:”∩ ∪ π Ω “等等
  • 其他可见字符

由于某些字符在正则表达式中属于特殊字符,那么在书写这类特殊字符的时候,应该注意要加上反斜杠,例如如果匹配^直接写/^/肯定不行,如果加上反斜杠,就可以了。^

不可见原子:

肉眼看不到的。

  • 空格。
  • 换行符
  • 回车符
  • 制表符。其实就是按一下键盘tab键出来的
  • 其他不可见字符

元字符

定义原子的筛选方式,队员原子进行归类,简化正则表达式的书写。

  • | 匹配两个或者多个分支选择。 和计算机语言中的含义是一样的:或者
  • [] 匹配方括号中的任意一个原子。
  • [^] 配配除方括号之外的任意字符串。
  • . 匹配除之外的任何单个字符。要匹配包括在内的任何字符,请使用象[.]的模式。
  • d 十进制数字,等同于[0-9]
  • D 匹配任意一个非十进制的数字,等同于[^0-9]
  • s 匹配任意一个不可见原子。等同于[fv]
  • S 匹配一个可见原子。等同于[^fv]
  • w 匹配任意数字、字母或下划线。既[0-9a-zA-Z_]
  • W 匹配任意非数字、字母或下划线。即[^0-9a-zA-Z_]

量词

表示某一个原子连续出现的数量。

  • {n} 表示前面的原子恰好出现n次
  • {n,} 表示前面的原子最少出现n次
  • {n,m} 表示前面的原子最少出现n此,最多出现m次
  • * 匹配0次、1次、或者多次。等同于{0,}
  • + 一次或者多次。等同于{1,}
  • ? 0次数或者1次。等同于{0,1}

边界控制

  • ^ 匹配字符串开始的位置。即”必须以……为开头”
  • $ 匹配字符串结束的位置。即”必须以……为结尾”

模式单元

将模式单元中的括号及其正则表达式当做是一个原子来看待。

  • () 匹配其中的整体为一个原子。

修正模式

给正则表达式的匹配过程添加一种匹配模式

  • U 加U是懒惰匹配,不加U是默认的贪婪匹配。
  • i 忽略英文字母大小写。
  • x 忽略空白。(包括空格和按tab键输出的制表符)
  • s 让元字符.匹配包括换行符在内的所有字符。
  • e preg_replace()在替换字符串中对逆向引用作正常的替换。简单的说,就是PHP会把replace的结果当做PHP代码。(替换字符串要符合php的语法规范)
  • 例如:echo preg_replace('/(d+),(d+)/e', '$1+$2', '2,3');会输出5。

书写方式为:

$pattern = '/hello World/U'

$pattern = '/hello World/i'

$pattern = '/hello World/Ui'//可以任意组合

java 正则匹配括号是否成对_十分钟学会正则表达式相关推荐

  1. java中xml的组装与解析(十分钟学会)

    xml的组装与解析(十分钟学会) 一.xml的解析 话不多说直接上代码 1.引入pom依赖 // 解析xml <dependency><groupId>org.jsoup< ...

  2. java正则匹配多个斜杠_正则表达式中两个反斜杠的匹配规则详解

    关于正则表达式raw的\匹配规则 这是我在学习中获得到的一个例子,第一表达式中匹配到的是none.于是乎我就在思考,为什么会匹配不到,假设\t被转义成一个\t,那么也应该匹配到\tsanle,而不是n ...

  3. java正则匹配括号_java正则表达式方括号匹配的认识

    在java正则表达式的学习中,方括号匹配是一个重点,在这里为了让学员们对方括号匹配这个知识点有更深刻的认识和了解,广州达内的老师将为你进行一次深刻的讲解. 在正则表达式中,[]是对指定的元素进行匹配, ...

  4. java正则匹配多个斜杠_正则表达式以匹配JAVA中的两个斜杠

    小编典典 您要匹配的"字符"为: "[/\\\\]" 先为字符串复制反斜杠,然后再为正则表达式复制. 当您需要在也使用反斜杠转义字符串的语言中使用反斜杠时,这可 ...

  5. python股票自动买卖视频教程_十分钟学会用Python交易股票

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本文通过讲述 [单股票均线策略] 在 Ricequant 量化平台的实现,熟悉平台并快速入门.创建自己的量化策略代码 .难易度:入门级.从一下几点说起: ...

  6. 我用python做股票_十分钟学会用Python交易股票

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本文通过讲述 [单股票均线策略] 在 Ricequant 量化平台的实现,熟悉平台并快速入门.创建自己的量化策略代码 .难易度:入门级.从一下几点说起: ...

  7. python 股票_十分钟学会用Python交易股票

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本文通过讲述 [单股票均线策略] 在 Ricequant 量化平台的实现,熟悉平台并快速入门.创建自己的量化策略代码 .难易度:入门级.从一下几点说起: ...

  8. python购买股票_十分钟学会用Python交易股票

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本文通过讲述 [单股票均线策略] 在 Ricequant 量化平台的实现,熟悉平台并快速入门.创建自己的量化策略代码 .难易度:入门级.从一下几点说起: ...

  9. 如何用python选股票_十分钟学会用Python交易股票

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本文通过讲述 [单股票均线策略] 在 Ricequant 量化平台的实现,熟悉平台并快速入门.创建自己的量化策略代码 .难易度:入门级.从一下几点说起: ...

最新文章

  1. Repository 设计模式介绍
  2. 轻量级微服务架构【读书笔记2】
  3. python判断对错题_python 初学者错题本
  4. python取出字典中的所有值的两种方法
  5. 对于es6的小小理解之generator函数
  6. 设计模式20——Mediator设计模式
  7. getdate 日期间隔_日期getDate()方法以及JavaScript中的示例
  8. docker rabbitmq_RabbitMQ的介绍及使用进阶(Docker+.Net Core)
  9. mysql 代替分号_php – mysql FIND_IN_SET()用分号代替逗号
  10. 【历史上的今天】1 月 31 日:Python 之父出生;宏碁大战联想;SBC 收购 ATT
  11. Diff 算法的执行过程数据响应式模拟routerSnabbdom
  12. 2020年中国海洋大学夏令营记录
  13. 数据防泄漏对于数据安全的重要性
  14. 腾讯云IM回调接口-单聊发言后回调
  15. android 播放视频文件格式,Android视频文件格式解析相关分析
  16. 3个开源音乐播放器:Aqualung,Lollypop和GogglesMM
  17. SQL Server的数据库文件保存在哪儿?
  18. 生成webservice客户端以及解决SSL异常
  19. Sql处理数字保留两位小数,而且四舍五入。
  20. 《信号与系统》(吴京)部分课后习题答案与解析——第三章(离散LTI系统的时域分析)

热门文章

  1. 【Git、GitHub、GitLab】七 git中分支的删除以及出现分离头指针的情况
  2. python练习题-day25
  3. Spring Aop——给Advice传递参数
  4. cf1108E2 线段树类似扫描线
  5. LeetCode(109):有序链表转换二叉搜索树
  6. day35-hibernate映射 03-Hibernate持久态对象自动更新数据库
  7. c语言编写单片机技巧
  8. c# 第四课 interfaces
  9. javascript用户登录_SAP HANA XS的JavaScript安全事项
  10. python ssh脚本_ssh爆破(python脚本)