【问题标题】:Need help for combining two regex conditions using something like AND operator需要帮助使用 AND 运算符组合两个正则表达式条件
【发布时间】:2013-03-05 07:06:36
【问题描述】:

我的正则表达式中有两个条件。 说,

  1. (.*text.*) ---> 它将检查输入字符串中是否包含子字符串“text”。
  2. (^((?!query).)*$) ----> 它将检查输入字符串是否不包含单词“query”。

两者都适合我。

但我想要一个正则表达式来使用AND 运算符之类的东西来检查这两个条件。

我想要一个正则表达式,它只有在输入字符串包含子字符串“text”且不包含“query”时才返回 true。

我得到了正则表达式不支持AND 运算符的信息。 因此,我尝试执行以下操作:

NOT(NOT(expression 1)|(NOT(expression 2)))

例如:- (!(.*query.*)|(^((?!text).)*$))

但即使这样对我也不起作用..

请任何人帮助我解决这个问题。

【问题讨论】:

  • Java 或 Javascript 或两者兼而有之?这是不一样的。如果只是要检查的静态文本,为什么不使用“包含”: (!stringToCheck.contains(text) && !stringToCheck.contains(query))
  • 显然目标风格是 Java。我删除了其他标签。

标签: java regex


【解决方案1】:

使用非消耗正则表达式。

典型的符号是:

(?=expr)

这意味着 match expr 但之后在原始匹配点继续匹配。

您可以根据需要执行任意数量的操作,这将是一个“and”。

语法例如:

(?=match this expression)(?=match this too)(?=oh, and this)

更新:-

需要添加.*,以防使用matches(),以便正则表达式匹配整个字符串。

您的正则表达式将是 str.matches("(?=(.*text.*))(?=(^((?!query).)*$)).*")

【讨论】:

  • 这不是一个“和”,这只是一个连接。当 text=meSt 和 query=meSt 时,您如何将“someString”评估为 false?
  • @Adrian - 这里是更详细的参考explanation
  • 谢谢 R.J,我试过 (?=(.*text.*))(?=(^((?!query).)*$)) 但它不适合我。对不起,我是正则表达式的新手。如果我错了,请纠正我。
  • 很乐意提供帮助 :) 如果它符合您的目的,请接受答案!
  • @R.J 感谢您的帮助.. 如果我们使用 str.matches 它可以工作,但代码就像“matcher = regexp.matcher(str);”并且在 if 条件下使用“matcher.find()”时它不起作用:(我无法修改代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-25
  • 2012-11-30
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
相关资源
最近更新 更多