【问题标题】:what does this regular expression match?这个正则表达式匹配什么?
【发布时间】:2014-09-15 09:06:24
【问题描述】:

我遇到了这个表达式,并试图找出匹配的正则表达式?

new Text(Arrays.toString(parts).replaceAll("^\\[|\\]$", "")

我使用Xeger 生成了一些字符串,但它可能没有显示正确的字符串,因为它一直只生成 2 个字符串 ^[ 和 ]$

【问题讨论】:

  • 你的猜测是什么?这个正则表达式的哪一部分不清楚?你知道^ 在正则表达式中的意思吗? $| 呢?你知道\\的作用吗?
  • 您注意到[]转义,也就是说,它们要按字面意思匹配吗?
  • 这是否意味着以 [ 开头(或)以 ] 结尾?
  • 是的,你的正则表达式匹配符号[,它在开头 ]在结尾。
  • 您的正则表达式匹配[foo 中的[foo] 中的][ 中的[,] 中的[foobar]

标签: java regex


【解决方案1】:

您的正则表达式所做的是匹配一个起始 [ 和一个结束 ]

Working demo

Debuggex Demo

来自 regex101 的解释:

1st Alternative: ^\[
    ^ assert position at start of a line
    \[ matches the character [ literally
2nd Alternative: \]$
    \] matches the character ] literally
    $ assert position at end of a line

所以,这段代码:

"[sdfsad sdfsd]asdfas]".replaceAll("^\\[|\\]$", "")

将删除开始和结束[],结果字符串将是:

sdfsad sdfsd]asdfas

【讨论】:

  • @user2023507 很高兴为您提供帮助。谢谢你的勾号。还要检查 debuggex.com 以获得图形视图
  • | 是 OR,而不是 AND。两半都匹配,但由 Java 的 replaceAll 匹配,而不是由于正则表达式本身。
  • @Jongware 我知道| 表示正则表达式或,但我并没有从字面上解释正则表达式。如果您在屏幕截图中看到第 4 个示例,它匹配 []。这就是我说“和”的原因。但是,是的,你是对的 | 在正则表达式引擎中表示 OR。
猜你喜欢
  • 1970-01-01
  • 2018-08-24
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 2011-09-17
  • 2014-05-14
相关资源
最近更新 更多