gpt4 book ai didi

Java RegEx - 特殊字符直到字符串结尾

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:28 24 4
gpt4 key购买 nike

给定的字符串规则是

[Random Nr of Letters]##[Random Nr of Letters]#[Random Nr of Letters]##########

字符串长度必须是 35

我的字符串看起来像

TEST##TESTING#TEST#################

我的问题是我无法检测到错误的格式,例如

TEST##TESTING#TEST##A##############

我的方法是:

private static boolean test(String test_line) {
String test = "[A-Z]{1,}##[A-Z]{1,}#[A-Z]{1,}#{1,}";
Pattern test_pattern = Pattern.compile(test);
Matcher matcher = test_pattern.matcher(test_line);
return matcher.find();
}

是否有一个简单的 RegEx 方法(我必须使用它),比如“用 # 结束这个字符串并且不允许其他字符”。

另一个问题:我如何确保我的测试不允许使用 A-Z 0-9 和 # 以外的其他字符?像这样的东西:

    String test = "([^A-Z][^0-9][#])";
Pattern test_pattern = Pattern.compile(test);
Matcher matcher = test_pattern.matcher(test_line);
return matcher.find();

(与谈判)

感谢您的帮助:)

最佳答案

让我们一步一步来:

确保某些字符串具有特定长度的正则表达式可以看起来像

^.{35}$

在哪里

  • ^ 表示字符串的开始
  • . 表示任何字符(行分隔符旁边)
  • {35} 表示前一个元素(在 out case . - 任何字符)可以出现的次数,所以这里的正则表达式需要 35 个字符
  • $表示字符串结束

在您的情况下,您只想接受 A-Z# 范围内的字符,因此您可以用此 character-class 替换 .(任何字符) [A-Z#] 这样你的正则表达式就可以看起来像

^[A-Z#]{35}$

但是您还想确保这些字符的顺序。换句话说,您还想检查整个字符串是否与其他正则表达式匹配

^[A-Z]{1,}##[A-Z]{1,}#[A-Z]{1,}#{1,}$

实际上,我们可以简单地使用 + 而不是 {1,},这将给我们

^[A-Z]+##[A-Z]+#[A-Z]+#+$

要组合这两个正则表达式,您可以使用 look-ahead 机制,它让我们可以查看使用它的位置之后的字符,并检查它之后的字符是否与其他正则表达式匹配。

所以最终的正则表达式可以看起来像

^(?=[A-Z#]{35}$)[A-Z]+##[A-Z]+#[A-Z]+#+$
----------- ------------------------
regex1 (length) regex2 (order)

现在,为了避免每次调用您的方法时都重新编译 (Pattern.compile(test)) 相同的正则表达式,最好将其编译版本存储在方法之外作为类字段。所以试试像

private static Pattern test_pattern = Pattern
.compile("^(?=[A-Z#]{35}$)[A-Z]+##[A-Z]+#[A-Z]+#+$");

private static boolean test(String test_line) {
return test_pattern.matcher(test_line).matches();
}

测试

System.out.println(test("TEST##TESTING#TEST#################"));//true
System.out.println(test("TEST##TESTING#TEST##A##############"));//false

关于Java RegEx - 特殊字符直到字符串结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25020093/

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