Java正则表达式匹配错误

时间:2015-01-10 21:33:47

标签: java expression

line.matches("[A-Z] ([a-zA-z][a-zA-Z]*)|\\#")

我需要阅读像这样的元素 "A ddg""B gH""D #"

但它不起作用,我需要知道正则表达式是否正常。

3 个答案:

答案 0 :(得分:2)

试试这个:

line.matches("[A-Z] ([a-zA-Z]+|#)")

你的大部分正则表达都是多余的:

  • \\##相同 - #
  • 没有什么特别之处
  • [a-zA-Z][a-zA-Z]*[a-zA-Z]+
  • 相同

你缺少的是正确的交替 - 你没有在正确的位置关闭括号。

答案 1 :(得分:1)

这将有效:

line.matches("[A-Z]( [a-zA-z]+)?( #)?")

匹配的内容(示例):

A
A #
A a
A aAaA
A a #
A aAaAa #

如果你不想要" A#":

line.matches("[A-Z]( [a-zA-z]+| #)")

答案 2 :(得分:1)

你有这个问题:

  • 您过早地关闭了括号,将#放在了它之外,
  • 您使用A-z范围代替A-Z

此外,您可以稍微改善一下你的正则表达式:

  • 你不需要逃离#
  • 而不是xx*您可以使用x+,因为:
    • +代表一次或多次
    • *代表零或更多

请尝试使用

line.matches("[A-Z] ([a-zA-Z]+|#)")