Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在regex中获得优先级?_Java_Regex - Fatal编程技术网

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]
    一个字母数字字符
  • (?:-?[A-Z0-9]+)*
    任意数量的可选连字符,后跟一个或多个alnum
  • \。
    文字点

(单击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])?\.