Java 如何在regex中获得优先级?
我有一个错误的正则表达式Java 如何在regex中获得优先级?,java,regex,Java,Regex,我有一个错误的正则表达式 ([A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]*\.) 我需要接受如下字符串: a-b. ab. a. 但是我不需要这个字符串-a-。 我应该换什么 [A-Za-z0-9]+\.|[A-Za-z0-9]+-?[A-Za-z0-9]\. 这个想法是: -?-可选破折号 \。-转义点,以匹配文字点 |-交替(一种或另一种) x+-一次或多次重复,相当于xx* 如果您不介意也匹配下划线,可以使用: 您可以通过使用可选组来尝试这样做 "(
([A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]*\.)
我需要接受如下字符串:
a-b.
ab.
a.
a-。
我应该换什么
[A-Za-z0-9]+\.|[A-Za-z0-9]+-?[A-Za-z0-9]\.
这个想法是:
-可选破折号-?
-转义点,以匹配文字点\。
-交替(一种或另一种)|
-一次或多次重复,相当于x+
xx*
您可以通过使用可选组来尝试这样做
"(?i)[A-Z0-9](?:-?[A-Z0-9]+)*\\."
用于无大小写匹配的标志(?i)
一个字母数字字符[A-Z0-9]
任意数量的可选连字符,后跟一个或多个alnum(?:-?[A-Z0-9]+)*
)
文字点\。
(单击Java)这适用于您的测试用例:
[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?\.
请参阅。尝试在regex101上调试它。您能用简单的英语解释一下regex规则是什么吗?
[A-Za-z0-9](?:-[A-Za-z0-9\-])*[A-Za-z0-9]*\。
我已经理解了这个想法。好办法非常感谢俄罗斯)非常感谢。“?:”是什么意思?@E.Simchuk欢迎(?:
启动一个.@E.Simchuk,(?:)
基本上与()
相同,它只是不捕获组。就匹配而言,它没有什么区别。
[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?\.