【问题标题】:How to regex match excluding certain characters?如何正则表达式匹配排除某些字符?
【发布时间】:2019-08-25 01:17:03
【问题描述】:

我为此尝试谷歌,但尚未找到解决方案。

假设我以字符串 "aaabbccd" 开头。然后我通过添加一些特殊字符来修改它:

  • "aa[ab]bccd"
  • "aa[a[b]bc]cd"
  • "[aa[a[b]bc]cd]"

当我修改字符串时,我想对其进行正则表达式匹配,而不使用字符 []。例子: 对于输入字符串

String s = "aa[ab]bccd"
s.matches(<my_regex_here>) // trying to match "bbc" should return true
s = "aa[a[b]bc]cd";
s.matches(<my_regex_here>) // trying to match for "abb" should return true

我尝试使用负前瞻,但如果我的理解是正确的,那么只有当我知道要排除的字符的确切位置时它才会起作用。有什么建议吗?

【问题讨论】:

  • b[\[\]]*b[\[\]]*c 不工作吗?
  • 代码中的 cmets 造成的混乱多于帮助。为什么要匹配第一个中的“bbc”?或者为什么第二个是“abb”?
  • 我想我不清楚。我想说的是我不会提前知道[]的位置,它们会在运行时发生变化。如果您从字符串中删除所有出现的[]bbc 应该返回 true,对于后者也是如此。
  • 那我就用一个简单的s.replaceAll("[\\[\\]]", "").contains("abb") 而不用太多正则表达式。

标签: java regex


【解决方案1】:

可以这样

s.replaceAll("\\[", "")
                .replaceAll("\\]", "")
                .matches(<my_regex_here>)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-04
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多