gpt4 book ai didi

Java 正则表达式;团体条件

转载 作者:太空宇宙 更新时间:2023-11-04 08:56:17 26 4
gpt4 key购买 nike

我想创建一个正则表达式,其中一个组的出现取决于是否已找到另一个特定组。我认为用一个例子更容易说明!

我想允许两种模式,如以下两个示例所示:JsJhJJ。这是不允许的:JsJsJsJJQ

因此,如果用户在第一个大写字母后输入一个小写字母,正则表达式会在第二个大写字母后输入另一个小写字母 - 但它不应该与第一个字母相同!

我像这样匹配第一个 (J):([123456789TJQKA]){1}([dsch]?){1}第二个大写字母与 (\\2) 匹配。

现在,我似乎无法找到最后一个小字母的解决方案。我可以让小字母匹配(这显然不是我想要的),但是如果存在的话,我如何通过仍然允许(并期望)剩下的三个小字母之一来排除最后一组中的第一个字母?

最佳答案

为什么使用正则表达式来实现纸牌游戏的逻辑?看起来很疯狂...不过这是可以做到的!

s.matches("([123456789TJQKA])([dchs])\\1(?!\\2)[dchs]|([123456789TJQKA])\\3")

这是一个测试,用于验证它是否正常工作(它还记录了我对您的问题中未涵盖的特殊情况的假设):

public class Test
{
private static void test(String input, boolean expected)
{
boolean result = input.matches("([123456789TJQKA])([dchs])\\1(?!\\2)[dchs]|([123456789TJQKA])\\3");
if (result != expected)
throw new RuntimeException("Failed!");
}

public static void main(String[] args) throws Exception
{
test("JJ", true);
test("JsJd", true);
test("11", true);
test("2c2h", true);

test("Js", false);
test("JsJs", false);
test("JsJ", false);
test("JQ", false);
test("1d1d", false);
test("J", false);
test("", false);
test("3d3d", false);
test("JsJdJ", false);
test("JsJdJh", false);
test("1A", false);
}
}

关于Java 正则表达式;团体条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2225407/

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