当前位置:网站首页>【正则表达式每日一技】逃逸正则表达式中具有特殊含义的字符
【正则表达式每日一技】逃逸正则表达式中具有特殊含义的字符
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 ,即只有在 (?!) 和 (?-!) 之间的正则表达式在匹配时才不区分大小写。
边栏推荐
- Pyg tutorial (2): graph data
- 微信小程序_4,WXSS模板样式
- Hub, switch, router
- 520 bubble source code
- win10上vs2017配置Eigen3开发环境
- Ztmao theme cat WordPress Theme classic lost version /wp website template download station source code + global SEO function setting
- 使用cell ranger进行单细胞转录组定量分析
- Use the loupe cell browser to view the results of 10x single cell transcriptome analysis
- 154-Solana分发token
- 【FPGA小波变换】基于FPGA的图像9/7整数小波变换verilog实现
猜你喜欢

0-1 knapsack problem (violent recursion / dynamic programming)

IDM mobile terminal function upgrade description

156 rust and Solana environment configuration

微信小程序_3,WXML模板语法
![Markdown mathematical grammar [detailed summary]](/img/c2/7aff61f7e82595a9d22c2d593148f0.png)
Markdown mathematical grammar [detailed summary]

Summary of each layer of the five layer reference model

Argo CD usage

Pyg tutorial (1): getting to know pytorch geometry
Butler-Volmer 公式的由来

Weather forecast applet source code / weather wechat applet source code
随机推荐
Geo2r: difference analysis of data in geo database
2022 operation and maintenance failure case experience
Bol Bohr's original dual currency driving model leads the new hotspot of dfi+nft+web3.0
Excel_submit
Crack the simple login system with NOP method
打造硬核敲门砖——简历
关于#mysql#的问题,如何解决?
Tweenmax irregular geometry background with animation JS effect
【GNN】GNN图神经网络工具箱的应用和matlab仿真
How to deal with the error message of concurrentmodificationexception?
kubernetes集群搭建详细教程
153-Solana创建PDA和存储
基于C#的ArcEngine二次开发57:每用户订阅上的所有人SID 不存在
怎么看小程序是谁开发的(查看小程序开发公司方法)
Argo CD 使用
如何利用MES管理系统实现防错和预警
Bloom filter
155-Solana存储数组
产品经理精通Axure工具篇
Hamming code verification [simple and detailed]