首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Perl正则表达式超详细教程

3.分组引用的反斜线序列 \1反向引用,其中1可以替换为任意一个正整数,即使超出9,例如\111表示匹配第111个分组 \g1或\g{1}:也是反向引用,只不过这种写法可以避免歧义,例如\g{1}11...同理\g1和\g11,只是使用\g引用的方式可以加上大括号使引用变得更安全,更易读,且\g可以使用负数来表示从右向左相对引用。这样在\g{-2}的左边添加新的分组括号时,无须修改引用表达式。...perl的分组捕获和分组引用 分组的基本应用 在基础正则中,使用括号可以对匹配的内容进行分组,这种行为称为分组捕获。捕获后可以通过\1这种反向引用方式去引用(访问)保存在分组中的匹配结果。...例如: "abc11ddabc11" =~ /([a-z]*)([0-9]*)dd\1\2/; 在perl中,还可以使用\gN的方式来反向引用分组,这个在上一节”反斜线序列”中已经解释过了。...当使用命名捕获的时候,要在正则内部引用这个命名捕获,除了可以使用序号类的绝对引用(如\1或\g1或\g{1}),还可以使用以下任意一种按名称引用方式: \g{NAME} \k{NAME} \k<NAME

6K30

G1垃圾收集器详解

G1的思路说起来也类似,它不要求每次把垃圾清理的干干净净,它只是努力做它认为对的事情。 我们要求G1,在任意1秒的时间内,停顿不得超过10ms,这就是在给它制定KPI。...G1会尽量达成这个目标,它能够反向推算出本次要收集的大体区域,以增量的方式完成收集。...这也是使用G1垃圾回收器(-XX:+UseG1GC)不得不设置的一个参数:-XX:MaxGCPauseMillis=10。 G1的堆内存划分 为了实现STW的时间可预测,首先要有一个思想上的改变。...而对于那些超过了整个Region容量的超级大对象,将会被存放在N个连续的Humongous Region之中,G1进行回收大多数情况下把Humongous Region作为老年代的一部分来进行看待。...当对象图扫 描完成以后,并发时有引用变动的对象会产生漏标问题,G1中会使用SATB(snapshot-at-the-beginning)算法来解决,后面会详细介绍。

1.5K10
您找到你想要的搜索结果了吗?
是的
没有找到

大厂面试题:有了 G1 还需要其他垃圾回收器吗?

今天我们主要来看下这两个高频的面试考题: G1 的回收原理是什么?为什么 G1 比传统 GC 回收性能好? 为什么 G1 如此完美仍然会有 ZGC?...G1 的思路说起来也类似,它不要求每次把垃圾清理的干干净净,它只是努力做它认为对的事情。 我们要求 G1,在任意 1 秒的时间内,停顿不得超过 10ms,这就是在给它制定 KPI。...这也是使用 G1 垃圾回收器不得不设置的一个参数: -XX:MaxGCPauseMillis=10 为什么G1 G1 的目标是用来干掉 CMS 的,它同样是一款软实时垃圾回收器。...相比 CMS,G1使用更加人性化。比如,CMS 垃圾回收器的相关参数有 72 个,而 G1 的参数只有 26 个。...JVM 启动时,G1 会先准备好 Eden 区,程序在运行过程中不断创建对象到 Eden 区,当所有的 Eden 区满了,G1 会启动一次年轻代垃圾回收过程。

26220

G1垃圾收集器详解(2)

分区模型 G1对内存的使用以分区(Region)为单位,而对对象的分配则以卡片(Card)为单位。 ? ? 每个分区都可能是年轻代也可能是老年代,但是在同一时刻只能属于某个代。...然而G1为了避免STW式的整堆扫描,在每个分区记录了一个已记忆集合(RSet),内部类似一个反向指针,记录引用分区内对象的卡片索引。...那么引用源自本分区的对象,当然不用落入RSet中;同时,G1 GC每次都会对年轻代进行整体收集,因此引用源自年轻代的对象,也不需要在RSet中记录。...这就出现了RSet,专门用来记录谁引用了我。 下面来看图说明:Region1和Region3中的对象引用了Region2中的对象,因此在Region2的RSet中了这两个引用。 ?...Snapshot-The-Beginning(SATB):SATB是G1 GC在并发标记阶段使用的增量式的标记算法。

1.3K20

Perl正则表达式:字符与字符集

… (fred)+ #可匹配fredfredfred… 圆括号内也即模式组内的字符串也可以被反向引用进行操作,被引用的模式组也被称为捕获组(capture group),引用方法为反斜杠加捕获组顺序编号...如果反向引用捕获组编号后面紧跟着数字,为了消歧义可能需要更多的圆括号,而从Perl 5.10开始,反向引用可以使用\g{n}的格式,如下所示: (.)...\g{1}11 #匹配类似于aa11这样的字符 在这种格式写法下,还可以使用相对位置进行编号: (.)(.)...\g{-1}11 #匹配类似于xaa11这样的字符 相对反向引用使用负号来指左边的捕获组,-1则为在左边最靠近引用位置的捕获组,这种写法避免了在另外加入括号之后所有编号都必须修改的窘况,更有利于程序维护...很多时候我们仅仅是想填加括号进行分组,但是又不想修改所有反向引用的编号,可以只启用圆括号的模式分组功能而关闭捕获功能,在左圆括号内添加?:修饰符,如下所示: y(?:(.)(.)\2\1) d(?

1K20

关于正则表达式,这篇都讲清楚了

到这里我们也就知道为什么众多编程语言的正则表达式基本一样,因为他们师从Perl。 注:Perl语言是一种擅长处理文本的语言,但因晦涩语法和古怪符号不利于理解和记忆导致很多开发者并不喜欢。 ?...这里给大家提一点就是:预编译(pre-use compile) 猪哥建议大家在生产环境中使用预编译功能,为什么呢?...不能使用反向引用等功能:因为每个字符只检查一次,文本零宽度(位置)只记录当前比较值,所以不能使用反向引用、环视等一些功能!...可实现反向引用等功能:因为具有回退这一步,所以可以很容易的实现反向引用、环视等一些功能! 两种引擎比较 ?...保存括号内的匹配结果之后,我们在后面的正则表达式中就可以使用,这就是我们所说的反向引用,在上面的案例中只有一个捕获,所以$1=b。

1.3K30

一篇值得收藏的正则表达式文章

到这里我们也就知道为什么众多编程语言的正则表达式基本一样,因为他们师从Perl。 注:Perl语言是一种擅长处理文本的语言,但因晦涩语法和古怪符号不利于理解和记忆导致很多开发者并不喜欢。...这里给大家提一点就是:预编译(pre-use compile) 猪哥建议大家在生产环境中使用预编译功能,为什么呢?...不能使用反向引用等功能:因为每个字符只检查一次,文本零宽度(位置)只记录当前比较值,所以不能使用反向引用、环视等一些功能!...可实现反向引用等功能:因为具有回退这一步,所以可以很容易的实现反向引用、环视等一些功能! 两种引擎比较 ?...保存括号内的匹配结果之后,我们在后面的正则表达式中就可以使用,这就是我们所说的反向引用,在上面的案例中只有一个捕获,所以$1=b。

76210

G1垃圾收集器概述

前言 开始学习前,抛出两个常见面试问题:1.G1的回收原理是什么?为什么G1比传统的GC回收性能好?2.为什么G1如此完美仍然会有ZGC?...G1的思路说起来类似,它不要求每次把垃圾清理的干干净净,只是努力做它认为对的事情。我们要求G1,在任意1秒的时间内,停顿不得超过10ms,这就是在给它制定KPI。...这也是使用G1垃圾回收器不得不设置的一个参数:-XX:MaxGCPauseMilis=10 简介 G1(Garbage First)垃圾收集器是当今垃圾回收技术最前沿的成果之一。...同优秀的CMS垃圾回收器一样,G1也是关注最小时延的垃圾回收器,也同样适合大尺寸堆内存的垃圾收集,官方也推荐使用G1来代替选择CMS。...为什么G1G1的目标是用来干掉CMS的,它同样是一款软实时垃圾回收器。相比CMS,G1使用更加人性化。比如,CMS垃圾回收器的相关参数有72个,而G1的参数只有26个。

92720

【JS】380- JavaScript 正则新特性

具名组匹配 正则表达式可以通过将字符封装在括号中对正则表达式的一部分进行分组,可以在内部反向引用匹配组。此外,还可以通过括号提取匹配值进行进一步处理。...例如,Python 使用 (?P) 表示具名组。Perl 支持具名组,语法与 JavaScript 相同(JavaScript 模仿了 Perl 的正则表达式语法)。...Java 也使用Perl 相同的语法。 除了能够通过 groups 对象引用具名组,还可以使用数字索引 - 类似于常规捕获组: const re = /(?d{4})-(?...('ordinal' in match.groups); // → true console.log(match.groups.ordinal); // → undefined 反向引用某个...the same // as the first two, the match will fail console.log(/(ww)/.test('abcd')); // → false 反向引用某个

1K20

正则表达式介绍与使用

为什么使用正则表达式? 答:典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。...与*之类的量词作用 分组和反向引用 基础符号: () #限制多选项范围,组成单元字符串,分组重复利用,注意要匹配圆括号字符,请使用 '\(' 或 '\)'。...\1 - \n #表示反向引用第几个()括号中匹配的字符串文本;即括号能够记忆其中的子表达式匹配的文本; 基础示例: #示例1.\1代表匹配的前面的一个分组[a-z],\2代表了后面的一个分组\2 echo..."aa11 b2c3 d44" | egrep -o '([a-z])\1([0-9])\2' aa11 #示例2.如果不采用反向引用则两个the会进行换行输出 echo "the the" | egrep...注意事项: 尽管反向引用非常实用,但是它任然有它的局限性;因为egrep把每行文件当做一个独立部分来看待(当匹配行尾与行首的字符时候容易出现BUG); 非捕获组 描述:它只用于分组,而不会影响文本的捕获和变量的保存

1.2K20

G1设计到堆空间调整

小编说:如果你在使用Java8,或者计划使用Java9,有很大可能是要么在评估G1垃圾收集器,要么已经在使用它。...所有分区的大小一样,在JVM运行过程中它们的尺寸也不会发生变化。分区尺寸是基于Java堆内存的初始值和最大值的平均数来进行计算的,这样对于这个平均堆尺寸就会有2000个左右的分区。...G1面临的一个潜在的挑战,就是某些“短命的”巨型对象虽然已经变成未被引用了,但可能一直没有被回收。JDK 8u40中实现了一个方法,某些情况下在年轻代收集时回收巨型分区。...Full垃圾收集 G1里full GC使用的是与串行垃圾收集器相同的算法。当发生full GC时,就会执行对整个内存堆的全面压缩。这确保最大数量的空闲内存可以被系统使用。...G1中-XX:GCTimeRatio的缺省值为9,而其他所有HotSpot垃圾收集器缺省使用99。GCTimeRatio的值越大,Java堆尺寸的增长就会更加得积极。

82730

大厂面试题整理(一):JVM

类加载器的本质 类加载器为什么有三层结构 怎么自定义类加载器做容器隔离? 讲讲类加载机制呗?都有哪些类加载器,这些类加载器加载哪些文件?...你知道强引用、弱引用和软引用吗?为什么要有这些东西?他们有什么作用?你在项目中用过吗? 说一下java类加载器的工作机制?类加载在那个区域进行的? 你自己定义的类能被最顶级的类加载器加载吗?为什么?...CMS和G1各自使用的算法以及优缺点 内存分配策略(如何在Eden和老年代中分配)、回收策略(Minor GC、Full GC) 谈谈你对上面GC中回收对象中提出的对象有什么理解?...知道G1么?回收过程是怎么样的? CMS GC有什么问题?怎么避免产生浮动垃圾? 如果web服务器突然出现频率很高的FullGC,可能是什么原因?你会怎么去排查呢? “只对堆进行gc ”这句话对不对?...线程池中的线程为什么不会被GC回收 JVM 简述 G1,可预测停顿时间,是怎么做到的? CMS和G1的区别,讲一讲CMS垃圾收集的步骤,哪些步骤是并发哪些是并行。

69060

正则表达式介绍与使用

为什么使用正则表达式? 答:典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。...与*之类的量词作用 分组和反向引用 基础符号: () #限制多选项范围,组成单元字符串,分组重复利用,注意要匹配圆括号字符,请使用 '\(' 或 '\)'。...\1 - \n #表示反向引用第几个()括号中匹配的字符串文本;即括号能够记忆其中的子表达式匹配的文本; 基础示例: #示例1.\1代表匹配的前面的一个分组[a-z],\2代表了后面的一个分组\2 echo..."aa11 b2c3 d44" | egrep -o '([a-z])\1([0-9])\2' aa11 #示例2.如果不采用反向引用则两个the会进行换行输出 echo "the the" | egrep...注意事项: 尽管反向引用非常实用,但是它任然有它的局限性;因为egrep把每行文件当做一个独立部分来看待(当匹配行尾与行首的字符时候容易出现BUG); 非捕获组 描述:它只用于分组,而不会影响文本的捕获和变量的保存

1K10

【进阶之路】攻克JVM——JVM的垃圾收集器(三)

初始标记阶段是完全STW的,引用程序会暂停。通过-XX:+CMSParallelInitialMarkEnabled参数可以开启该阶段的并行标记,使用多个线程进行标记,减少暂停时间。...这里有个问题,为什么JVM的分代年龄为什么是15?...G1对内存的使用以分区(Region)为单位,而对对象的分配则以卡片(Card)为单位。 巨型对象 有时候,对象太大的话,就不能再TLAB中进行分配(比如超过一个分区)。...已记忆集合 Remember Set (RSet) G1垃圾收集器为了避免出现STW式的整堆扫描,在每个分区记录了一个已记忆集合(RSet),内部类似一个反向指针,记录引用分区内对象的卡片索引。...但是并非所有的引用需要记录在RSet中,G1 GC每次都会对年轻代进行整体收集,因此引用源自年轻代的对象,不需要在RSet中记录。只有老年代的分区可能会有RSet记录。

34130

Perl正则表达式:正则匹配

常用的匹配模式下的修饰符有以下几种: 上面表格中不同的模式修饰符可以进行组合使用,而且其顺序对模式没有影响,如下所示: /abc....正则表达式一般将变量放在括号内(这是和反向引用类似的),例如下面一段类似于grep工具命令的小程序: my $what = ; chomp $what; while () { if...$what可以是任何值,甚至是正则表达式元字符,如下所示: ⑸捕获变量 在上一小节正则表达式的模式分组中,我们知道圆括号通常会触发正则表达式捕获相匹配的字符串以供反向引用。...事实上,Perl会自动将这些圆括号内的捕获组储存在称为捕获变量的标量变量里面,其变量名与反向引用的编号一样都是数字,其命名与捕获组编号相同,也即$1、$2…。...同理,在正则表达式里的反向引用可以使用\g{label}或者\k{label}。

4K10

JVM之垃圾回收-垃圾收集器

)都没有使用传统的GC收集器代码框架,而另外独立实现;而其余几种收集器则共用了部分的框架代码; Parallel Scavenge收集器 Parallel Scavenge收集器是一个新生代收集器,它也是使用复制算法的收集器...可以减少合并整理过程的停顿时间; 默认为0,也就是说每次执行Full GC,不会进行压缩整理; 由于空间不再连续,CMS需要使用可用"空闲列表"内存分配方式,这比简单实用"碰撞指针"分配内存消耗大;...G1收集器 上一代的垃圾收集器(串行serial, 并行parallel, 以及CMS)把堆内存划分为固定大小的三个部分: 年轻代(young generation), 年老代(old generation...问题 为什么G1可以实现可预测停顿 可以有计划地避免在Java堆的进行全区域的垃圾收集; G1收集器将内存分大小相等的独立区域(Region),新生代和老年代概念保留,但是已经不再物理隔离。...(如果使用G1后发现性能还没有使用CMS好,那么还是选择CMS比较好) 设置参数 可以通过下面的参数,来设置一些G1相关的配置。

56310

搞懂系列三: G1垃圾收集器

如果要另外选择分区的尺寸,可以通过命令行选项:-XX:G1HeapRegionSize=n中进行设置 1.5 RSet   G1垃圾收集器里每一个RSet对应的是一个Region内部对象引用情况,说白了就是存在...在标记存活对象的时候,G1使用RSet概念,将每个分区指向分区内的引用记录在该分区,避免对整个堆扫描,并行独立处理垃圾集合 老年代对年轻代的引用,维护老年代分区指向年轻代分区的指针 老年代对老年代的引用...为什么G1如此设计???...在JDK 8u40之前,它只能在并发收集周期的清除阶段回收,但是在JDK 8u40之后,巨型分区可以在年轻代收集中和full GC被回收 二.G1的设计 2.1 为什么会有G1?   ...为什么会有G1呢?因为并发、并行和CMS垃圾收集器都有2个共同的问题: 老年代收集器大部分操作都必须扫描整个老年代空间(标记,清除和压缩)。

49910

用了很多年的 CMS 垃圾收集器,终于换成了 G1,真香!!

doi=10.1.1.63.6386&rep=rep1&type=pdf Motivation 关于为什么要重新设计一个 G1 垃圾收集器,论文中给出的理由相当简单:现有的垃圾收集器无法满足 软实时(...Hotspot JVM 经典内存布局 为了达到软实时的目标,同时也是为了更好地应对大内存,G1 将中不再使用上述的内存布局。...在并发标记发生之前,G1 会确保 Remember Set Log 中的记录处理完,从而保证并发标记算法一定能拿到最新的、正确的 Remember Set。...每次收集时 G1 会选出垃圾最多的几个 Region,进行一次 Stop-the-world 的收集过程。...SATB 算法顾名思义是对 Marking 开始时的一个(逻辑上的)Snapshot 进行标记。为什么要用 Snapshot 呢?

92350

记一次符合Google Coding Style的Bash脚本重构

这也使得代码更容易维护和更新,因为其他人可以更轻松地理解代码。 可读性:编码准则有助于提高代码的可读性。通过对代码进行格式化和注释,代码会更易于阅读和理解,从而减少错误和缺陷,并提高代码的质量。...通过使用一致的格式和风格,团队成员可以更轻松地理解代码,并进行更快速的故障排除和修复。 代码质量:编码准则有助于提高代码的质量。...继续搜索: 对于一个使用bash为主要语言的项目,业界推荐的coding guideline? 使用有意义的变量名:变量名应该具有描述性,以便其他人可以轻松地理解代码。...使用双引号:在引用变量时,使用双引号而不是单引号,以确保变量扩展能够正常工作。 使用全局变量:尽量避免使用全局变量,因为它们很难调试和维护。...使用“set -u”:使用“set -u”来检查未定义的变量,以避免在引用未定义的变量时产生错误。 这些规范有助于提高 Bash 代码的可读性、可维护性和可靠性。

45210
领券