gpt4 book ai didi

java - 如何匹配字符串中间或末尾的字符但只匹配一次

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:12:57 25 4
gpt4 key购买 nike

我正在尝试使用 String.matches() 匹配 Java 中的字符串。

可接受的值为

  • ABC321,
  • ABC321/OTHER888
  • 或ABC321/

但是

  • /ABC321
  • 或 ABC321/OTHER888/

不应该匹配。

所以 / 可以在字符串的中间或末尾,但不能在开头,它应该只出现一次。

这是我设法做到的最接近的正则表达式:

myString.matches("^[A-Za-z0-9]+/?[A-Za-z0-9]+/?$");

但问题是/可能会出现多次。那么如何改进正则表达式以允许/仅一次?

最佳答案

您的正则表达式的问题是您允许 / 至少使用 /? 两次。

您只需要允许 / 一次。

^[A-Za-z0-9]+/?[A-Za-z0-9]*$

此外,matches 需要完整的字符串匹配,如果您只打算使用,则无需在此正则表达式中使用 ^$ anchor 它与匹配

参见 IDEONE demo

System.out.println("ABC321".matches("[A-Za-z0-9]+/?[A-Za-z0-9]*"));
System.out.println("ABC321/OTHER888".matches("[A-Za-z0-9]+/?[A-Za-z0-9]*"));
System.out.println("ABC321/".matches("[A-Za-z0-9]+/?[A-Za-z0-9]*"));
System.out.println("/ABC321".matches("[A-Za-z0-9]+/?[A-Za-z0-9]*"));
System.out.println("ABC321/OTHER888/".matches("[A-Za-z0-9]+/?[A-Za-z0-9]*"));

输出:

true
true
true
false
false

关于java - 如何匹配字符串中间或末尾的字符但只匹配一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30801640/

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