正则表达式元字符,如果要匹配这个元字符本身,前面要加反斜杠转义(Java是加2个反斜杠)。

但是左大括号 { 和右大括号 } 不用转义也可以匹配。

我们用Notepad++演示一下。



Python正则表达式小括号怎么转义_正则表达式 ^[0+]


支浩宇的姓名:{haoyuName},支浩宇的ID:{haoyuId},备注信息:{notes}
支浩宇的姓名:[haoyuName],支浩宇的ID:{haoyuId},备注信息:{notes}
支浩宇的姓名:(haoyuName),支浩宇的ID:{haoyuId},备注信息:{notes}
zhihaoyu{3}
zhihaoyu{32}
zhihaoyu{0}
zhihaoyu{00}
zhihaoyu{03}
zhihaoyu{3,}
zhihaoyu{0,}
zhihaoyu{3
zhihaoyu{32
zhihaoyu0}
zhihaoyu3,}
zhihaoyu0,}
zhihaoyu{0,,}
zhihaoyu{-3}
zhihaoyu{3.2}
zhihaoyu{big}
zhihaoyu{32big}
zhihaoyu{3big2}
zhihaoyu{0x1}


先演示中括号和小括号,

查找正则表达式:[haoyu

结果:无效的正则表达式

查找正则表达式:(haoyu

结果:无效的正则表达式

查找正则表达式:[haoyuName]

结果:匹配haoyuName的其中一个字母

查找正则表达式:(haoyuName)

结果:匹配haoyuName整个单词,不包括括号

现在演示大括号,

查找正则表达式:{haoyu

结果:匹配{haoyu

查找正则表达式:{haoyu

结果:匹配{haoyu

查找正则表达式:Name}

结果:匹配Name}

查找正则表达式:Name}

结果:匹配Name}

查找正则表达式:{haoyuName}

结果:匹配{haoyuName},包括大括号

查找正则表达式:{haoyuName}

结果:匹配{haoyuName},包括大括号

从以上演示可知,大括号前面加不加转义符号,匹配的结果是一样的。大括号被视为普通字符,而不是元字符。

以下这几个测试用例,大括号被视为元字符,大括号要加转义符号才能匹配到,


zhihaoyu{3}
zhihaoyu{32}
zhihaoyu{0}
zhihaoyu{00}
zhihaoyu{03}
zhihaoyu{3,}
zhihaoyu{0,}


以下这几个测试用例,大括号被视为普通字符,不用加转义符号,直接能匹配到,


zhihaoyu{3
zhihaoyu{32
zhihaoyu0}
zhihaoyu3,}
zhihaoyu0,}
zhihaoyu{0,,}
zhihaoyu{-3}
zhihaoyu{3.2}
zhihaoyu{big}
zhihaoyu{32big}
zhihaoyu{3big2}
zhihaoyu{0x1}


只有当一对大括号中的内容是0、正整数、0和一个逗号、正整数和一个逗号,

{0}
{3}
{0,}
{3,}

这四种形式,才会把大括号视为元字符。如果能确定不是这四种形式,则正则表达式大括号前面不用加转义符号。如果有可能是这四种形式,那就要加转义符号。

如果是单独一个左大括号跟正整数, 正整数跟单独一个右大括号,也不属于这四种形式,不用加转义符号。

IntelliJ IDEA的提示

在IntelliJ IDEA里面,如果在右大括号前面加转义符号,IDE会提示这个转义符号是多余的:Redundant character escape '}' in RegExp


Python正则表达式小括号怎么转义_正则表达 添加字符_02


Python正则表达式小括号怎么转义_正则表达式 ^[0+]_03


可以改成:


Python正则表达式小括号怎么转义_正则表达式 ^[0+]_04


这是正则表达式的另一个语法。当一对大括号(或中括号)出现时,只要左边的括号加了转义符号,右边的括号加不加都一样,引擎都认为是要转义的。这个语法仅限于中括号和大括号,我试了小括号不是这样,小括号必须左右两边都加转义符号。

我们没有必要去记这些偏门的语法。 最简单的做法是,全都加上转义符号,绝对稳妥(也就是说,我这篇文章根本没必要看)。IDE的提示也不是100%准确的,听不听它的提示,取决于我的心情。