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

Perl正则表达式:正则匹配

正则表达式一般将变量放在括号内(这是和反向引用类似的),例如下面一段类似于grep工具命令的小程序: my $what = ; chomp $what; while () { if...$what可以是任何值,甚至是正则表达式元字符,如下所示: ⑸捕获变量 在上一小节正则表达式的模式分组中,我们知道圆括号通常会触发正则表达式捕获相匹配的字符串以供反向引用。...事实上,Perl会自动将这些圆括号内的捕获组储存在称为捕获变量的标量变量里面,其变量名与反向引用的编号一样都是数字,其命名与捕获组编号相同,也即$1、$2…。...尽管我们有多种办法避免在程序维护的时候使捕获组编号错乱,例如使用只具有模式分组功能的圆括号,但是使用顺序编号的捕获变量名称仍会带来很多麻烦。...同理,在正则表达式里的反向引用可以使用\g{label}或者\k{label}。

4.2K10

正则表达式分组与捕获

捕获的子序列稍后可以通过 Back 引用(反向引用) 在表达式中使用,也可以在匹配操作完成后从匹配器检索。...注意:反向引用,引用的是前面捕获组中的文本而不是正则,也就是说反向引用处匹配的文本应和前面捕获组中的文本相同,这一点很重要。....*\1 其中使用了分组,\1就是对引号这个分组的引用,它匹配包含在两个引号或者两个单引号中的所有字符串,如,”abc” 或 ” ’ ” 或 ’ ” ’ ,但是请注意,它并不会对” a’或者 ‘a”匹配...原因是捕获组捕获的内容是被存储在内存中,可供以后使用,比如反向引用就是引用的内存中存储的捕获组中捕获的内容。而非捕获组则不会捕获文本,也不会将它匹配到的内容单独分组来放到内存中。...所以,使用非捕获组较使用捕获组更节省内存。在实际情况中我们要酌情选用。 分组使用 对正则表达式分组之后,就额可以通过Matcher 对象的group方法进行获取分组后匹配的值。

2.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    ⑵模式分组与捕获 在Perl的正则表达式中,圆括号()也是一个特殊的元字符,用来对字符串进行分组,很多元字符只对单个字符进行操作,进行分组后可对多个字符进行操作,如下所示: fred+ #可匹配freddddd...… (fred)+ #可匹配fredfredfred… 圆括号内也即模式组内的字符串也可以被反向引用来进行操作,被引用的模式组也被称为捕获组(capture group),引用方法为反斜杠加捕获组顺序编号...,这里匹配y开头和d开头具有四个字符回文结构的单词组,例如yabba dabba 对于复杂嵌套结构的捕获组编号,Perl有个很简单的规则,只需根据从左到右左圆括号的顺序即可。...如果反向引用捕获组编号后面紧跟着数字,为了消歧义可能需要更多的圆括号,而从Perl 5.10开始,反向引用可以使用\g{n}的格式,如下所示: (.)...\g{-1}11 #匹配类似于xaa11这样的字符 相对反向引用使用负号来指左边的捕获组,-1则为在左边最靠近引用位置的捕获组,这种写法避免了在另外加入括号之后所有编号都必须修改的窘况,更有利于程序维护

    1.2K20

    java正则表达式解析「建议收藏」

    二、java正则表达式是怎么用的? 知道了正则表达式是干什么的,就要说说他在java中是怎么用的。...在 Java 中,\\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。...所以,在其他的语言中(如Perl),一个反斜杠 \ 就足以具有转义的作用,而在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。...允许在正则表达式中使用 ASCII 代码。 \num 匹配 num,此处的 num 是一个正整数。到捕获匹配的反向引用。例如,”(.)\1″匹配两个连续的相同字符。...\nm 标识一个八进制转义码或反向引用。如果 \nm 前面至少有 nm 个捕获子表达式,那么 nm 是反向引用。如果 \nm 前面至少有 n 个捕获,则 n 是反向引用,后面跟有字符 m。

    1.2K40

    正则表达式-学习2 - 语法语法学习重点详解

    Groups & Lookaround(组和查看) 组允许您将一系列令牌组合在一起操作。捕获组可以通过反向引用来引用,并在结果中单独访问。...用法 匹配 capturing group(捕获组): (ABC) 将多个标记组合在一起,并创建一个提取子字符串或使用反向引用的捕获组。...=px) -- 1pt 2px 3em 4px 备注1 - 捕获组: 捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用。...捕获组 1.1 what 捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用。当然,这种引用既可以是在正则表达式内部,也可以是在正则表达式外部。...Expression) 普通捕获组在大多数支持正则表达式的语言或工具中都是支持的,而命名捕获组目前只有.NET、PHP、Python等部分语言支持,据说Java会在7.0中提供对这一特性的支持

    40630

    代码之美,正则之道

    如果中括号中包含元字符, 则元字符降级为普通字符, 不再具有元字符的功能, 如 [+.?] 匹配 加号, 点号或问号. 排除性字符组 [^…] 匹配任何未列出的字符,....实例之后,我们来看看反向引用的原理。 正则表达式匹配时,各个捕获性分组匹配到的内容,会依次保存在内存中一个特定的组里,通过\+数字的方式可以在正则中引用组里的内容,这种引用称作反向引用。...修饰符g表示全文查找,因此前两次匹配到了 “1234” 和 “5678”,此时正则引擎的指针处于数字8的后面,再往后匹配显然子表达式(\d){4}无法匹配了,此时第一个捕获组匹配到空字符串,那么反向引用...并且该数组具有如下特点: 第 0 个项表示正则表达式捕获的文本 第 1~n 项表示第 1~n 个反向引用, 依次指向第 1~n 个分组捕获的文本, 可以使用RegExp.$ + “编号1~n” 依次获取分组中的文本..., 并且不支持捕获组, 因此也就不支持反向引用.

    1.8K20

    代码之美,正则之道

    如果中括号中包含元字符, 则元字符降级为普通字符, 不再具有元字符的功能, 如 [+.?] 匹配 加号, 点号或问号. 排除性字符组 [^…] 匹配任何未列出的字符,....实例之后,我们来看看反向引用的原理。 正则表达式匹配时,各个捕获性分组匹配到的内容,会依次保存在内存中一个特定的组里,通过\+数字的方式可以在正则中引用组里的内容,这种引用称作反向引用。...修饰符g表示全文查找,因此前两次匹配到了 “1234” 和 “5678”,此时正则引擎的指针处于数字8的后面,再往后匹配显然子表达式(\d){4}无法匹配了,此时第一个捕获组匹配到空字符串,那么反向引用...并且该数组具有如下特点: 第 0 个项表示正则表达式捕获的文本 第 1~n 项表示第 1~n 个反向引用, 依次指向第 1~n 个分组捕获的文本, 可以使用RegExp.$ + “编号1~n” 依次获取分组中的文本..., 并且不支持捕获组, 因此也就不支持反向引用.

    1.3K30

    Java正则表达式语法规则(具体)

    对于单个“\”如“\\”,其后字符表示转义字符,输出一个反斜杠“\”。但是双“\\”则表明要插入正则表达式的反斜线,其后的字符具有特殊含义。...所以在 Java 正则表达式中需要有两个反斜杠才能被解析为其他语言中的转义功能。...例:”\x41″匹配”A”。”\x041″与”\x04″&”1″等效。允许在正则表达式中使用 ASCII 代码。 \num 匹配 num,此处的 num 是一个正整数。到捕获匹配的反向引用。....)\1″匹配两个连续的相同字符。 \n 标识一个八进制转义码或反向引用。如果 \n 前面至少有 n 个捕获子表达式,那么 n 是反向引用。...\nm 标识一个八进制转义码或反向引用。如果 \nm 前面至少有 nm 个捕获子表达式,那么 nm 是反向引用。如果 \nm 前面至少有 n 个捕获,则 n 是反向引用,后面跟有字符 m。

    68010

    正则表达式在 ES2018 中的新写法

    最后,如果在正则表达式中使用了命名捕获组,则将它们放在 groups 属性中。 在代码中, groups 的值为 undefined ,因为没有被命名的捕获组。 负向先行的构造是 (?!...) 。...后行断言的反向版本由 (?匹配不在lookbehind中指定的模式之前的模式。 例如,正则表达式 /(?捕获组 你可以通过将字符封装在括号中的方式对正则表达式的一部分进行分组。 这可以允许你将规则限制为模式的一部分或在整个组中应用量词。 此外你可以通过括号来提取匹配值并进行进一步处理。...,并使用 \1 的形式进行反向引用。...除了 JavaScript 之外, s 标志还可用于许多其他语言,如 Perl 和 PHP。 Unicode 属性转义 ES2015中引入的新功能包括Unicode感知。

    96520

    正则表达式及string相关内容

    在 Java 中,\\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。...所以,在其他的语言中(如Perl),一个反斜杠 \ 就足以具有转义的作用,而在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。...允许在正则表达式中使用 ASCII 代码。 \num 匹配 num,此处的 num 是一个正整数。到捕获匹配的反向引用。例如,"(.)\1"匹配两个连续的相同字符。...\n 标识一个八进制转义码或反向引用。如果 \n 前面至少有 n 个捕获子表达式,那么 n 是反向引用。否则,如果 n 是八进制数 (0-7),那么 n 是八进制转义码。...\nm 标识一个八进制转义码或反向引用。如果 \nm 前面至少有 nm 个捕获子表达式,那么 nm 是反向引用。如果 \nm 前面至少有 n 个捕获,则 n 是反向引用,后面跟有字符 m。

    1K00

    正则表达式及string相关内容

    在 Java 中,\\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。...所以,在其他的语言中(如Perl),一个反斜杠 \ 就足以具有转义的作用,而在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。...允许在正则表达式中使用 ASCII 代码。 \num 匹配 num,此处的 num 是一个正整数。到捕获匹配的反向引用。例如,"(.)\1"匹配两个连续的相同字符。...\n 标识一个八进制转义码或反向引用。如果 \n 前面至少有 n 个捕获子表达式,那么 n 是反向引用。否则,如果 n 是八进制数 (0-7),那么 n 是八进制转义码。...\nm 标识一个八进制转义码或反向引用。如果 \nm 前面至少有 nm 个捕获子表达式,那么 nm 是反向引用。如果 \nm 前面至少有 n 个捕获,则 n 是反向引用,后面跟有字符 m。

    57820

    python进阶(20) 正则表达式的超详细使用

    的代码是一样的,只是给正则表达式命名了,以后就可以通过组编号或组名字来访问 1.4.3 反向引用分组 除了可以在程序diamante中访问正则表达式匹配之后的分组内容,还可以再正则表达式内部引用之前的分组...*'并不能保证开始标签和结束标签是一致的。为了解决此问题,可以引用反向引用,即让第二组反向引用第一组。在正则表达式中反向引用语法是\组编号,组编号是从1开始的。...捕获分组的匹配子表达式结果被暂时保存到内存中,以备表达式或其他程序引用,这个过程称为”捕获”,捕获结果可以通过组编号或组名进行引用。...但是有时并不想引用子表达式的匹配结果,不想捕获匹配结果,只是将小括号作为一个整体进行匹配,此时可以使用非捕获分组,在组开头使用?...捕获分组将括号中的内容作为子表达式进行捕获匹配,将匹配的子表达式(即组的内容)返回,结果是['.jpg','.jpg']。

    3.6K30

    Java正则速成秘籍(二)之心法篇

    exp) 命名的反向引用 捕获 (?:exp) 非捕获组 非捕获 (?=exp) 零宽度正预测先行断言 非捕获 (?!exp) 零宽度负预测先行断言 非捕获 (?...反向引用 带编号的反向引用 带编号的反向引用使用以下语法:\number 其中number 是正则表达式中捕获组的序号位置。 例如,\4 匹配第四个捕获组的内容。...命名的反向引用 命名后向引用通过使用下面的语法进行定义:\k 例 匹配重复的单词和紧随每个重复的单词的单词(命名子表达式) // (?...\W: 匹配包括空格和标点符号的一个非单词字符。 这样可以防止正则表达式模式匹配从第一个捕获组的单词开头的单词。 (?\w+): 匹配一个或多个单词字符。 命名此捕获组 nextWord。...exp) 命名的子表达式(反向引用)。 (?:exp) 非捕获组,表示当一个限定符应用到一个组,但组捕获的子字符串并非所需时,通常会使用非捕获组构造。 (?

    2.3K100

    这样学习正则表达式就轻松了!

    具有完整语法的正则表达式使用在字符的格式匹配方面上,后来被应用到熔融信息技术领域。...捕获与反向引用 单纯说到捕获,他的意思是匹配表达式,但捕获通常和分组联系在一起,也就是“捕获组”。...捕获组: 匹配子表达式的内容,把匹配结果保存到内存中以数字编号或显示命名的组里(可以把它想象为java中的array和map),以深度优先进行编号,之后可以通过序号或名称来使用这些匹配结果。...有一种情况当在匹配的过程中,需要与已经捕获到的分组进行匹配,这时就需要使用到保存在内存中的捕获组了,这种使用方式就被称为: 反向引用 。...那如果我想再匹配复杂一点的结果,比如:XYY 这种的结果,又该怎么写呢? 其实有了上面的基础之后就很简单了,我们需要做的就是 对捕获到的第2个分组进行反向引用就可以了!

    49010

    Java正则表达式匹配日期及基本使用

    +m.end()); } } 正则表达式语法 在 Java 中,\\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。...所以,在其他的语言中(如Perl),一个反斜杠 \ 就足以具有转义的作用,而在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。...允许在正则表达式中使用 ASCII 代码。 \num 匹配 num,此处的 num 是一个正整数。到捕获匹配的反向引用。例如,"(.)\1"匹配两个连续的相同字符。...\n 标识一个八进制转义码或反向引用。如果 \n 前面至少有 n 个捕获子表达式,那么 n 是反向引用。否则,如果 n 是八进制数 (0-7),那么 n是八进制转义码。...\nm 标识一个八进制转义码或反向引用。如果 \nm 前面至少有 nm 个捕获子表达式,那么 nm 是反向引用。如果 \nm 前面至少有 n 个捕获,则 n 是反向引用,后面跟有字符 m。

    5.5K41

    【JS】380- JavaScript 正则新特性

    后行肯定断言确保匹配的字符串前面有两个数字,后行否定断言确保数字不是35。 具名组匹配 正则表达式可以通过将字符封装在括号中对正则表达式的一部分进行分组,可以在内部反向引用匹配组。...Perl 支持具名组,语法与 JavaScript 相同(JavaScript 模仿了 Perl 的正则表达式语法)。Java 也使用与 Perl 相同的语法。...除了 JavaScript 之外,还有许多其他语言,如 Perl 和 PHP 也有 s 修饰符。 Unicode 属性类 ES2015 中引入 Unicode 感知。...与常规捕获组相比,具名组匹配使用更具表现力的语法。 s( dotAll)修饰符改变 .元字符的表现,匹配换行符。最后,Unicode 属性类提供了一种新的转义序列。...它还可以检测正则表达式中可能出现的语法错误。Regex101 和 RegexBuddy 是两个流行正则表达式测试工具。

    1K20

    正则表达式之入门篇

    匹配到'b'和'b'之间的位置。 括号与捕获组 在正则表达式中,括号是一个功能非常多的操作符。本章我们将会详细介绍正则表达式中的括号的各种作用。...捕获组与非捕获组 如果我们在正则表达式中,我们需要获取特定的匹配内容,那么我们就要用到捕获组。捕获组通常使用(p),其中p是一个子模式,表示需要捕获的内容。...:bc)d/; let result = 'abcd'.match(reg); // 得到的result没有捕获组 反向引用 当我们在正则表达式中需要使用前面捕获组匹配的内容时,我们可以使用反向引用。...这在匹配一些成对的字符如'和"等时非常有效。...如果在正则表达式中出现的捕获组个数小于使用的捕获组,那么\字符就会被当成一个转移符而非反向引用。注:\2表示对2进行转义的话,不同的浏览器对转义后的结果是不一样的。

    45910

    正则表达式真的很骚,可惜你不会写!

    捕获和非捕获 单纯说到捕获,他的意思是匹配表达式,但捕获通常和分组联系在一起,也就是“捕获组” 捕获组:匹配子表达式的内容,把匹配结果保存到内存中中数字编号或显示命名的组里,以深度优先进行编号,之后可以通过序号或名称来使用这些匹配结果...反向引用 上面讲到捕获,我们知道:捕获会返回一个捕获组,这个分组是保存在内存中,不仅可以在正则表达式外部通过程序进行引用,也可以在正则表达式内部进行引用,这种引用方式就是反向引用。...根据捕获组的命名规则,反向引用可分为: 数字编号组反向引用:\k 或\number 命名编号组反向引用:\k 或者\'name' 好了 讲完了,懂吗?不懂!!!...因为捕获组通常是和反向引用一起使用的 上面说到捕获组是匹配子表达式的内容按序号或者命名保存起来以便使用 注意两个字眼:“内容” 和 “使用” 这里所说的“内容”,是匹配结果,而不是子表达式本身,强调这个有什么用...还记得捕获组有两种命名方式吗,一种是是根据捕获分组顺序命名,一种是自定义命名来作为捕获组的命名 在默认情况下都是以数字来命名,而且数字命名的顺序是从1开始的 因此要引用第一个捕获组,根据反向引用的数字命名规则

    50200

    正则表达式Python_python正则表达式匹配字符串

    将正则表达式的一部分内容进行组合,以便使用量词或者|。 2、反向引用前面()内捕获的内容: 通过组号反向引用 每一个没有使用?...:的小括号都会分配一个组好,从1开始,从左到右递增,可以通过\i引用前面()内表达式捕获的内容 通过组名反向引用前面小括号内捕获的内容 可以通过在左括号后面跟随?...P,尖括号中放入组名来为一个组起一个别名,后面通过(?P=name)来引用前面捕获的内容。如(? P\w+)\s+(?P=word)来匹配重复的单词。...每一个匹配的地方用x进行替换,返回替换后的字符串,如果指定m,则最多替换m次。对于x可以使用/i或者/gid可以是组名或者编号来引用捕获到的内容。...rx.split(s, m): 分割字符串,返回一个列表,用正则表达式匹配到的内容对字符串进行分割 如果正则表达式中存在分组,则把分组匹配到的内容放在列表中每两个分割的中间作为列表的一部分,如:

    1.1K30
    领券