当前位置:网站首页>【正则表达式每日一技】逃逸正则表达式中具有特殊含义的字符
【正则表达式每日一技】逃逸正则表达式中具有特殊含义的字符
2022-06-21 06:53:00 【TakingCoding4Granted】
1 问题
在正则表达式的场景下,一部分字符具有除字面量以外的特殊含义,有时候需要按照字符的字面量进行匹配。例如,你现在需要匹配出这一样一段文本的字面量:
The punctuation characters in the ASCII table are: !"#$%&'()*+,-./:;<=>[email protected][\]^_`{
|}~
2. 解决方案
使用下列正则表达式可以匹配出上述文本的字面量:
The punctuation characters in the ASCII table are: !"#\$%&'\(\)\*\+,-\./:;<=>\[email protected]\[\\]\^_`\{\|}~
- 正则表达式选项:无
- 正则表达式风格:.NET ,Java ,JavaScript ,PCRE1 ,Perl ,Python ,Ruby
3. 讨论
在正则表达式的场景下,字符 $()*+.?[\^{| 具有特殊含义,除此之外,其他字符可以直接使用自身来匹配出字面量。这些特殊字符在正则表达式中被称为元字符。如果想要匹配其字面量,需要加上 \ 进行字符转义,因此,正则表达式 \$\(\)\*\+\.\?\[\\\^\{\| 可以匹配出文本 $()*+.?[\^{| 。
有些先前使用过正则表达式的读者可能会有这样的疑问:花括号和方括号一般都是成对出现,而且 - 在正则表达式中一般也有特殊含义,为什么没有在上述介绍时得到体现。这是因为 } 、] 以及 - 只有在特定情况下才属于正则表达式的元字符。
具体地,对于 } 和 ] ,只有当对应的 { 和 [ 没有被转义时,二者才分别是元字符,当二者被转义时,单独出现的 } 和 ] 并没有特殊含义;同样地,对于 - ,也只有其在未被转义的 [ 之后,才是正则表达式下的元字符。
4. 拓展
逃逸块
对于支持所谓逃逸块风格的正则表达式,上述解决方案可以写成如下所示更加易读的形式:
The punctuation characters in the ASCII table are: \Q!"#$%&'()*+,-./:;<=>[email protected][\]^_`{|}~\E
- 正则表达式选项:无
- 正则表达式风格:Java 6 ,PCRE ,Perl
在 Perl , PCRE1 以及 Java 中支持 \Q 和 \E 形成的逃逸块,其中 \Q 可以逃逸其后直到 \E 包括 \ 在内的所有元字符,如果省略 \E 的话,那么从 \Q 直到正则表达式结尾的字符都被视为字面量。
不区分大小写
默认情况下,正则表达式是区分大小写的,即正则表达式 regex 可以匹配文本 regex 但却无法匹配出 Regex ,REGEX 或 ReGeX 等,如果希望其可以匹配出所有这些文本,则需要打开不区分大小写的模式。
实际上,在大多数的编程语言自带的正则表达式支持库中,都有特定的标识符可以实现这样的功能,如果你希望直接在正则表达式中实现这样的需求,那么你可以使用模式限定符 ?! ,也就是说正则表达式 (?!)regex 可以匹配出 Regex ,REGEX 或 ReGeX 等文本。
- 正则表达式格式:
(?!)ascii- 正则表达式选项:无
- 正则表达式风格:.NET ,Java ,XRegExp ,PCRE ,Perl ,Python ,Ruby
特别地,.NET ,Java ,PCRE ,Perl 以及 Ruby 还支持局部模式限定符,即只让正则表达式的一部分在匹配时不区分大小写。例如:sensitive(?!)caseless(?-!)sensitive 可以匹配文本 sensitiveCASELESSsensitive 但不能匹配 SENSITIVEcaselessSENSITIVE ,即只有在 (?!) 和 (?-!) 之间的正则表达式在匹配时才不区分大小写。
边栏推荐
- 152-Solana入门(十六)- 创建MetaplexNFT
- Feature scaling for machine learning
- C skill tree evaluation
- 使用Loupe Cell Browser查看10X单细胞转录组分析结果
- Pyg tutorial (3): neighbor sampling
- 天气预报小程序源码/天气类微信小程序源码
- matplotlib子图美化操作
- What is a good primary key for MySQL
- Bol Bohr's original dual currency driving model leads the new hotspot of dfi+nft+web3.0
- Filtre Bloom
猜你喜欢

GEO2R:对GEO数据库中的数据进行差异分析

Modbus poll v9.9.2 build 1690 MODBUS test tool single file version

Pyg tutorial (4): Customizing datasets

Trick or treat SVG Halloween JS special effect

ADEX governance voting: pledge reward halved

Superparameters and model parameters

Google Earth Engine(GEE)——全球农田有机土壤碳和氮排放(1992-2018年度)数据集

Minesweeping - C language - Advanced (recursive automatic expansion + chess mark)

如何利用MES管理系统实现防错和预警

Pyg tutorial (3): neighbor sampling
随机推荐
matplotlib子图美化操作
Markdown mathematical grammar [detailed summary]
Ztmao主题猫wordpress主题经典失传版/WP网站模板下载站源码+全局SEO功能设定
Yield Guild Games 与 Walken 达成合作
产品经理精通Axure工具篇
Work
Modbus Poll v9.9.2 Build 1690 Modbus测试工具单文件版
从 Stream 到 Kotlin 再到 SPL
Candy tunnel JS special effect code
布隆過濾器
How to deal with the error message of concurrentmodificationexception?
Unittest使用
【基于栈的二叉树中序遍历】二叉树的中序遍历+栈,O(h)的空间复杂度
From stream to kotlin to spl
Understand this point
Dynamic planning exercises (II)
基于C#的ArcEngine二次开发57:每用户订阅上的所有人SID 不存在
onnx转tensorrt学习笔记
Lnc2Meth:与疾病相关的lncRNA上的甲基化位点
老用户回来看看