gpt4 book ai didi

java - 正则表达式中的 AND 运算符

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:10:53 26 4
gpt4 key购买 nike

我搜索了一段时间如何在 Java 中的正则表达式中使用逻辑运算 AND,但没有找到。
我已尝试按照类似主题中的建议进行操作:

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

而且它不起作用。即使是带有 ?= 的简单示例也会返回 false:

String b = "aaadcd";
System.out.println(b.matches("(?=aa.*)"));

我还读到(expression X)(expression Y)应该像X AND Y一样工作,但它像X OR Y.
我做错了什么?

添加:试图在最后添加 .* 。还是不行。
例如:

[2-9]?[0-9]{5,9}||1[2-9][0-9]{1,2}||120[0-9]{1 ,1}||119[0-9] = X - 如果数字小于 1190 则返回 false

[0-9]{1,3}||1[0-0][0-9]{1,2}||11[0-8][0-9]{1, 1}||119[0-2] = Y - 如果数字大于 1992,则返回 false。

String a = "1189";
a.matches(X) // return false
a.mathes(Y) // return true
a.matches((?=X)(?=Y).*) // return true, but should return false.

添加:是的,我的正则表达式不正确。我的错。问题解决了。非常感谢大家!

最佳答案

我想你需要的是 (?=X)Y

  • (?=X) 匹配 X,但不消耗它(零宽度)
  • Y 并匹配 Y

主要问题:X和Y不对,应该是(假设4位):

X:119[0-9]|1[2-9][0-9]{2}|[2-9][0-9]{3}

  • 1190-1199,或
  • 1200-1999,或
  • 2000-9999

Y: 1[0-8][0-9]{2}|19[0-8][0-9]|199[0-2]

  • 1000-1899,或
  • 1900-1980,或
  • 1990-1992

这里是测试代码:

// X - return false if number is less than 1190
String X = "119[0-9]|1[2-9][0-9]{2}|[2-9][0-9]{3}";

// Y - return false if number is greater than 1992.
String Y = "1[0-8][0-9]{2}|19[0-8][0-9]|199[0-2]";

String pattern = "(?=" + X + ")" + Y;

String values = "1000 1100 1180 1189 1190 1191 1199 1200 1290 1900 1980 1989 " +
"1990 1991 1992 1993 1999 2000 3000 2991 9999";
for (String string : values.split(" ")) {
System.out.printf("\"%s\" %s%n", string, string.matches(pattern));
}

关于java - 正则表达式中的 AND 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6185438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com