如何获得正则表达式的优先级?

时间:2016-01-24 13:57:50

标签: java regex

我有一个错误的正则表达式

([A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]*\.)

我需要接受以下字符串:

  • a-b.
  • ab.
  • a.

但我不需要这个字符串 - a-.

我应该改变什么?

3 个答案:

答案 0 :(得分:1)

[A-Za-z0-9]+\.|[A-Za-z0-9]+-?[A-Za-z0-9]\.

这个想法是:

  • -? - 可选短划线
  • \. - 转义点,以匹配文字点
  • | - 交替(一个或另一个)
  • x+ - 一次或多次重复,相当于xx*

如果您不介意匹配下划线,可以使用word character set

\w+\.|\w+-?\w\.

See it in action

答案 1 :(得分:1)

您可以尝试使用可选组。

"(?i)[A-Z0-9](?:-?[A-Z0-9]+)*\\."
    无标签匹配的
  • (?i)标志。
  • [A-Z0-9]一个字母数字字符
  • (?:-?[A-Z0-9]+)*任意数量的(?:可选连字符,后跟一个或多个alnum )
  • \.字面点

See demo at Regexplanet(点击Java)

答案 2 :(得分:1)

这适用于您的测试用例:

[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?\.

请参阅live demo