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

b410d546dff26f155ed797f389b7751a.png

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

正则引擎

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

  • 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'//可以任意组合

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android token机制_你真的了解16.6ms刷新机制吗?

阅读本文前&#xff0c;请您先点击上面的蓝色字体“Android扫地僧”&#xff0c;“关注”后再点击置顶公众号&#xff0c;优质干货&#xff0c;重磅资源第一时间送达。散人丶https://juejin.im/post/5ce686a46fb9a07ec754f470前言之前在整理知识的时候&#xff0c;看到android屏…

dfa2.java 原理_DFA编程练习2

题目: 请设计DFA, 使其接受全部含有奇数个1的串, 假定 ∑ {0, 1}.解:DFA可能出现两个个状态:qeven: 读入了偶数个1的串.qodd: 读入了奇数个1的串, 该状态也是终结状态(accept state).它们的状态转移图如下:编写程序, 运行效果如下:测试用例说明:0000不被上图的DFA接受1111不被…

fread读取整个文件_qt如何实现大文件的加载和显示

最近研究了下如何用qt的原生控件来加载和显示大文件&#xff08;>1G&#xff09;&#xff0c;分享下一些摸索经验。下文源码&#xff1a;compilelife/loginsight​github.com文件的内存映射在开始qt部分之前&#xff0c;我们先了解一个概念——文件的内存映射。我们知道一般…

linux内核编译及添加系统调用(hdu)_浅谈关于Linux内核write系统调用操作的原子性

Linux系统的write调用到底是不是原子的。网上能搜出一大堆文章&#xff0c;基本上要么是翻译一些文献&#xff0c;要么就是胡扯&#xff0c;本文中我来结合实例来试着做一个稍微好一点的回答。先摆出结论吧。结论包含两点&#xff0c;即write调用不能保证什么以及write调用能保…

java 判断对象为控制_Java流程控制

Java流程控制1、Scanner对象①java.util.Scanner是Java5的新特性&#xff0c;可以通过Scanner类来获取用户的输入。②基本语法&#xff1a;1 Scanner snew Scanner(System.in);③通过next()和nextLine()方法接受用户输入&#xff0c;通过hasNext()和hasNextLine()方法来判断用户…

directx最终用户运行时_运维定位服务故障时,前5分钟都在忙啥?

遇到服务器故障&#xff0c;问题出现的原因很少可以一下就想到。我们基本上都会从以下步骤入手&#xff0c;这些也是绝大多数运维工程师在定位故障时前几分钟的主要排查点&#xff1a;一、尽可能搞清楚问题的前因后果不要一下子就扎到服务器前面&#xff0c;你需要先搞明白对这…

IDE--ubuntu下安装 Source insight

2013-06-03 09:05 74人阅读 评论(0) 收藏 举报 习惯了在source insight下编辑阅读源码&#xff0c;在linux下用vi总是用不好 &#xff0c;还是在ubuntu上用回熟悉的source insight。 在ubuntu中&#xff0c;安装windows程序用wine&#xff0c;然后用wine安装windows软件即可。…

python中什么是数据驱动_利用Python如何实现数据驱动的接口自动化测试

前言 大家在接口测试的过程中&#xff0c;很多时候会用到对CSV的读取操作&#xff0c;本文主要说明Python3对CSV的写入和读取。下面话不多说了&#xff0c;来一起看看详细的介绍吧。 1、需求 某API&#xff0c;GET方法&#xff0c;token,mobile,email三个参数 token为必填项 mo…

密码锁 java接口_从synchronized和lock区别入手聊聊java锁机制

写这篇文章之前&#xff0c;我去百度了一下啥叫锁&#xff0c;百度百科上写道&#xff1a;置于可启闭的器物上&#xff0c;以钥匙或暗码开启。确实我们一般理解的锁就是门锁&#xff0c;密码锁&#xff0c;但是在计算机科学中&#xff0c;锁又是啥&#xff0c;说实话&#xff0…

lua 给userdata设置元表_lua学习之复习汇总篇

第六日笔记1. 基础概念程序块定义在 lua 中任何一个源代码文件或在交互模式中输入的一行代码程序块可以是任意大小的程序块可以是一连串语句或一条命令也可由函数定义构成&#xff0c;一般将函数定义写在文件中&#xff0c;然后用解释器执行这个文件换行在代码中不起任何作用&a…

集群服务负载均衡------LVS

个人的理解&#xff0c;以一种通俗易懂的方式讲述出来&#xff0c;如果有哪些地方说的不正确的话&#xff0c;希望大家留言指出来。笔者会非是常的感谢&#xff01; Cluster服务器集群&#xff0c;直接理解为一些单一的服务器的集合通过某种方式组合起来&#xff0c;为客户端提…

tomcat jsp导入java_[导入]Tomcat JSP Web 开发中的乱码问题小姐

1. 静态页面的乱码问题文件的编码和浏览器要显示的编码不一致。1) 检查文件原始的编码, 可以用记事本打开, 然后选择另存为来看;2) 给当前页面加入一个指令来建议浏览器用指定的编码来显示文件字符内容.3) 如果系统是英文XP,没装东亚字符集支持, 也会显示乱码.2. JSP 页面的乱码…

四大开源分布式存储_ipfs分布式存储行业面临着四大主要风险,你知道是哪些吗?...

为了响应国家号召、推动分布式存储技术落地、防御行业风险&#xff0c;中国分布式存储产业联盟启动&#xff0c;全国从事IPFS以及分布式存储从业者对行业风险及联盟成立的必要性达成了高度共识&#xff0c;目前有36家以上的IPFS分布式存储行业企业填写了联盟申请表。几位国内知…

pjsua帮助手册(中文)

原文地址 : http://www.pjsip.org/pjsua.htm 介绍 PJSUA是一个开源的命令行SIP用户代理&#xff08;软电话&#xff09;&#xff0c;用PJSIP协议&#xff0c;PJNATH&#xff0c;和PJMEDIA实现。 它虽然只有很简单的命令行界面&#xff0c;但是功能齐全。 SIP功能&#xff1a; 多…

js date转成 时间字符串_秋招快要开始了,前端笔试中的坑位-JS隐式转换问题

我们在写笔试题的时候&#xff0c;经常碰到涉及隐式转换的题目&#xff0c;例如"1" 2 obj 1 [] ![] [null] false 和 叫做严格运算符&#xff0c;对象类型指向地址相同或原始类型&#xff08; 数值、字符串、布尔值&#xff09;值相同&#xff1b;叫做相等运算…

Java中快速处理集合_简洁又快速地处理集合——Java8 Stream(上)

作者&#xff1a;Howie_Y&#xff0c;系原创投稿主页&#xff1a;www.jianshu.com/u/79638e5f0743Java 8 发布至今也已经好几年过去&#xff0c;如今 Java 也已经向 11 迈去&#xff0c;但是 Java 8 作出的改变可以说是革命性的&#xff0c;影响足够深远&#xff0c;学习 Java …

eclipse编译java项目class文件_动态编译 Java 代码以及生成 Jar 文件

导读&#xff1a; 最近在看 Flink 源码的时候发现到一段实用的代码&#xff0c;该代码实现了 java 动态编译以及生成 jar 文件。将其进行改进后可以应用到我们的平台上&#xff0c;实现在平台页面上编写 java 代码语句&#xff0c;提交后由后台进行编译和打成 Jar 包再上传到指…

Dx11DemoBase 基类(三) 实例应用 【已实现】【附带源码】

现在我已经到哪了? 读书时&#xff0c;尤其是技术知识书籍&#xff0c; 我一般会担忧自己是否陷得太深&#xff0c; 细节关注得太多&#xff0c; 而忘了整体的过程&#xff1b; 一直以来对Direct3D 很畏惧&#xff0c; 因为太多函数和细节&#xff1b;现在我必须暂缓下&#x…

修改 decimal 默认值为0.00 sql_被经理邀请去“爬山”,只是因为我写错了一条SQL语句?...

作者&#xff1a;isysc1链接&#xff1a;https://juejin.im/post/5f06a2156fb9a07e5f5180df来源&#xff1a;掘金前戏SQL 写的妙&#xff0c;涨薪呱呱叫&#xff01;新来的实习生小杨写了一条 SQL 语句SELECT wx_id from user WHERE wx_id 2当小杨迫不及待准备下班回家的时候&…

JS中关于clientWidth、offsetWidth、scrollWidth

网页可见区域宽&#xff1a; document.body.clientWidth;网页可见区域高&#xff1a; document.body.clientHeight;网页可见区域宽&#xff1a; document.body.offsetWidth (包括边线的宽);网页可见区域高&#xff1a; document.body.offsetHeight (包括边线的宽);网页正文全…