Java 构造特定正则表达式

Java 构造特定正则表达式,java,regex,Java,Regex,我想用Java创建一个正则表达式,并满足以下条件: 长度:正好10个字符。不多不少 可以接受A-Z(仅大写字母)和数字0-9之间的任何字符 在任何位置只能接受一个短划线字符“-”。它不能接受任何其他字符,严格来说只能接受一个破折号 示例: ABCD-12345 F-01234GHK 09-PL89GG5 LJ8U9N3-Y2 PLN86D4V-1 我一直在尝试使用我自己发明的正则表达式,一些正则表达式接近我想要的结果,但没有成功 我必须组合两个正则表达式吗 请帮我解决这个问题。。。。提前

我想用Java创建一个正则表达式,并满足以下条件:

  • 长度:正好10个字符。不多不少
  • 可以接受A-Z(仅大写字母)和数字0-9之间的任何字符
  • 在任何位置只能接受一个短划线字符“-”。它不能接受任何其他字符,严格来说只能接受一个破折号
示例:

  • ABCD-12345
  • F-01234GHK
  • 09-PL89GG5
  • LJ8U9N3-Y2
  • PLN86D4V-1
我一直在尝试使用我自己发明的正则表达式,一些正则表达式接近我想要的结果,但没有成功

我必须组合两个正则表达式吗

请帮我解决这个问题。。。。提前谢谢

您可以使用:

^(?![^-]*+-[^-]*+-)[A-Z0-9-]{10}$
注意:如果使用
matches
方法,您可以移除锚定。

您可以使用以下方法:

^(?![^-]*+-[^-]*+-)[A-Z0-9-]{10}$

注意:如果使用
matches
方法,您可以删除锚定。

我认为您需要向前看(这是一种将两个正则表达式组合在一起的方法)


第二部分将匹配10个字符,即A-Z、0-9或破折号;第一部分是消极的前瞻,它将拒绝包含两个破折号的模式。

我认为您需要前瞻(这是一种组合两个正则表达式的方法,某种程度上)


第二部分将匹配10个字符,即A-Z、0-9或破折号;第一部分是消极前瞻,它将拒绝包含两个破折号的模式。

您介意分享您的想法吗?为什么不使用java方法检查长度?您介意分享您的想法吗?为什么不使用java方法检查长度?您能添加一个演示链接吗?该示例似乎不起作用given@amir什么输入不起作用?我试过了,看起来还可以。但是如果你删除
^
$
,上面的答案就行了。你的答案可能是正确的well@Amir:因为您正在测试一个长度超过10个字符的字符串,因为您已粘贴了所有示例strings@Amir:如果要使其与regex101一样工作,请添加m修饰符。但问题很清楚:长度:正好是10个字符。不多不少。如果你移除锚定,模式可以接受任何大于或等于10的字符串长度。你能添加一个演示链接吗?在这个例子中它似乎不起作用given@amir什么输入不起作用?我试过了,看起来还可以。但是如果你删除
^
$
,上面的答案就行了。你的答案可能是正确的well@Amir:因为您正在测试一个长度超过10个字符的字符串,因为您已粘贴了所有示例strings@Amir:如果要使其与regex101一样工作,请添加m修饰符。但问题很清楚:长度:正好是10个字符。不多不少。如果你移除锚,模式可以接受任何大于或等于10的字符串长度。这对于我需要实现的东西来说很好!!!同时使用
匹配
方法,这就是我实际使用的方法!!!谢谢你的解决方案!!!这对我需要实现的东西很好!!!同时使用
匹配
方法,这就是我实际使用的方法!!!谢谢你的解决方案!!!