匹配方括号的正则表达式是什么?

133

我想要一个匹配方括号[的正则表达式。目前还没有找到这样的正则表达式,我认为我已经尝试了所有可能性,但还是没有找到正确的。请问有什么有效的正则表达式可以实现这个功能吗?

10个回答

148

使用反斜杠\ 在方括号前面如何?通常方括号匹配一个字符类。


23
如果你想在C#中编写这个正则表达式,你需要在方括号前面使用两个反斜杠 \. - Shrewdroid
7
其实我不知道它是如何起作用的,也不知道这个答案为什么获得了这么高的排名。 - Vitali Pom
2
这个问题询问的是正则表达式,而不是如何在主机语言中编码它们并劫持反斜杠以供自己使用。如果你处于一个shell或语言解析器会解析或处理反斜杠的地方,你可能需要将反斜杠加倍,但这不是这个具体问题所问的。 - tripleee

66

尝试使用\\[,或者简单地使用\[


在一个纯JS脚本中,双反斜杠对我有效。 - kodliber

37

如果您想匹配以[开始且以]结尾的表达式,请使用\[[^\]]*\]

下面是每个部分的含义(如在www.regexr.com中所解释的): enter image description here


你能告诉我们一下吗?屋顶上的 ^ 在方括号中表示“非”字符类。 - Timo

13

你是否用\进行转义?

/\[/

以下是一个有用的资源,可帮助你开始学习正则表达式:Regular-Expressions.info


9
如果你想同时找到方括号的两种变体,可以使用以下模式,该模式定义了一个范围,其中包括或者 [符号或者 ]符号:/[\[\]]/

3
您可以省略第一个反斜杠。[[\]]将匹配任一括号。在某些正则表达式方言中(例如grep),如果您将]紧接着放在[后面,那么您可以省略在]之前的反斜杠(因为一个空的字符类永远没有用处):[][]。但这种方法在Java或JavaScript中不适用。 - cayhorstmann
我曾尝试过 sed -r 's|[\[\]]|!|g',但它只匹配了整个短语一次。我想保持表达明确,但这是唯一有效的组合:s|[][]|!|g - Pysis

7
通常,当您需要在正则表达式中使用“特殊”字符时,只需在其前面加上 \ 即可。因此,一个字面意义上的 [ 就会变成 \[

5
如果你想要移除[或者],可以使用表达式:"\\[|\\]"
两个反斜杠用于转义方括号,管道符号表示“或”。

谢谢!其他答案对我都没用。我试图将一个json数组字符串分割成Java数组。所以我必须删除引号和方括号,然后在逗号上进行拆分["item1" , "item2"] - dko
1
通常情况下,这里的两个反斜杠是错误的。在某些语言中(如Java、Python(如果不在文字r"..."字符串中),等等),您需要反斜杠转义反斜杠,以将其作为单个反斜杠传递到正则表达式引擎中,但这是主机语言的(误)特性,并不是一个简单询问正则表达式而没有特定主机语言的正确答案。 - tripleee

4

[ 前面加上反斜杠,它会起作用吗?

\[ 还是 \\[


2

对于一个纯粹的正则表达式,很简单:

1 /[]abcde]/ - 这是在类中包含 ']' 的方法。

2 /[abc[de]/ - 自由地将任何其他内容放入方括号中,包括 '['。(大部分元字符在'[]'内失去其特殊含义)。

3 用 'grep' 或 'vim' 等工具首先测试(验证)你的正则表达式。(它们都很好使.)

4 如果你的脚本环境不一致,现在尝试插入 '\' 也未为晚。


真的是个很棒的技巧。我尝试了所有方法来包含 find -regex 中的方括号,而你的解决方案是唯一可行的:-not -regex "[][a-zA-Z0-9/.() ßÄÖÜäöüàéèí_-]+"(这甚至使用了一个技巧,将连字符作为类中的最后一个字符而无需转义)。 - mgutt

-1

以下表达式可以检测到时序65

\[(?<timeElpsed>\d+)ms\]

从下面的日志中:

[2022-12-16T04:51:55.993+0000] [ INFO] [scala-execution-context-global-75] [200 OK]: [100.107.99.132] [65ms] "content-length:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接