gpt4 book ai didi

用于验证字符串的 Java 正则表达式

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:03 27 4
gpt4 key购买 nike

我刚买了一本关于 Regex 的书,想试着了解它,但我仍然在为它苦苦挣扎。我正在尝试创建一个 java 正则表达式来满足可以满足的字符串配置;

  1. 可以包含小写字母 ([a-z])
  2. 可以包含逗号 (,),但只能在单词之间
  3. 可以包含冒号(:)但必须用单词或乘法(*)分隔
  4. 可以包含连字符(-)但必须用单词分隔
  5. 可以包含乘法 (*),但如果使用,它必须是冒号之前/之间/之后的唯一字符
  6. 不能包含空格,“单词”由连字符 (-) 或逗号 (,) 或冒号 (:) 或字符串结尾分隔

例如,以下内容为真:

  1. 富:酒吧
  2. foo-bar:foo
  3. foo,bar:foo
  4. foo-bar,foo:bar,foo-bar
  5. foo:bar:foo,bar
  6. *:foo
  7. 富:*
  8. *:*:*

但以下是错误的:

  1. foo:bar
  2. ,foo:酒吧
  3. foo-:bar
  4. -foo:bar
  5. foo,:bar-
  6. foo:bar,
  7. foo,*:bar
  8. foo-*:bar

这是我目前所拥有的:

^[a-z-]|*[:?][a-z-]|*[:?][a-z-]|*

最佳答案

这是适用于所有情况的正则表达式:

([a-z]+([,-][a-z]+)*|\*)(:([a-z]+)([,-][a-z]+)*|\*)*

详分割析如下:

用于构建像这样复杂的正则表达式的基本结构之一实际上非常简单,其形式为 text(分隔 rune 本)*。该形式的正则表达式将匹配:

  • 一个文本
  • 一个文本,一个分隔符,和另一个文本
  • 一个文本,一个分隔符,另一个文本,另一个分隔符,还有一个文本
  • 或更多,只需在末尾添加另一个分隔符和一个文本即可。

下面是代码的分解:

  • [a-z]+([,-][a-z]+)* 是我上面讨论的模式的一个实例:text 这里是 [ a-z]+分隔符[,-]
  • ([a-z]+([,-][a-z]+)*|\*) 允许改为匹配星号。
  • ([a-z]+([,-][a-z]+)*|\*)(:([a-z]+([,-][a-z]+)*|\*))* 是我上面讨论的模式的另一个实例:text([a-z]+([,-][a-z]+)*|\*)分隔符:

如果您打算将其用作更大的正则表达式的组成部分,其中组匹配很重要,我建议将内部括号设为非分组,并在整个正则表达式周围放置分组括号,如下所示:

((?:[a-z]+(?:[,-][a-z]+)*|\*)(?::([a-z]+)(?:[,-][a-z]+)*|\*)*)

关于用于验证字符串的 Java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18767696/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com