有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我刚买了一本关于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. 福:酒吧
  2. foo:酒吧
  3. foo-:酒吧
  4. -福:酒吧
  5. 福:酒吧-
  6. 福:酒吧
  7. foo,*:bar
  8. foo-*:酒吧

这就是我目前的情况:

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

共 (1) 个答案

  1. # 1 楼答案

    我们很少看到有人能定义阳性和阴性测试用例。这让生活变得更加轻松

    以下是我的正则表达式,它提供了95%的解决方案:

    • "(([a-z]+|\\*)[:,-])*([a-z]+|\\*)"(JAVA版本)
    • (([a-z]+|\*)[:,-])*([a-z]+|\*)(普通正则表达式)

    它只是区分单词(a-z或*)和分隔符(其中一个:-,)并且它必须至少包含一个单词,并且单词必须用分隔符分隔。它适用于阳性病例和阴性病例,但最后两个阴性病例除外

    一句话:这种复杂的“语法”在现实生活中可以通过语法定义工具ANTLR(或者几年前使用lex/yacc、flex/bison)来实现。Regex可以做到这一点,但维护起来并不容易