首页 > 解决方案 > Java 正则表达式允许所有字符期望 `

问题描述

我创建了允许count(*)但不允许的正则表达式模式`count(*)`

[^`]*[Cc][Oo][Uu][Nn][Tt][(](\*)[)][^`]*

它可以单独解决,但是如果我将它们一起传递

count(*),`count(*)`

我应该得到这场比赛,但恰恰相反

标签: javaregex

解决方案


请注意,[^`]*匹配个或多个反引号,因此不会阻止匹配Count(*)反引号之间的字符串。

您可以使用

(?i)(?<!`)Count\(\*\)(?!`)

或者,如果您需要将其作为一个完整的单词进行匹配,请在单词\b的开头添加:

(?i)(?<!`)\bCount\(\*\)(?!`)

查看正则表达式演示

细节

  • (?i)- 不区分大小写的修饰符
  • (?<!`)- `不允许紧挨当前位置的左侧。
  • \b- 单词边界
  • Count\(\*\)-Count(*)子串
  • (?!`)- `不允许立即到当前位置的右侧。

在 Java 中,

String regex = "(?i)(?<!`)Count\\(\\*\\)(?!`)";

推荐阅读