Java 字符串的悬空元字符和正则表达式模式

Java 字符串的悬空元字符和正则表达式模式,java,regex,pattern-matching,Java,Regex,Pattern Matching,我想为以下字符串格式创建一个模式。我有以下格式,但我卡住了,因为我无法正确扫描它。详情如下 示例字符串:JAS 5F W 123或BWER34 23 C 23 上面的字符串有以下要遵循的规则 最后的数字只能是2位或3位数字(123&&023或 (23) 在此之前,只允许单个字符不区分大小写(W或c) 在此之前,只允许使用2位或1位数字以及字符“f”或“f” 字符串的开头可以是任意长度的任意字符串字母数字字符串。 所有的部分都被空间隔开 我提出了以下字符串模式,但当我运行java程序时,它给出了悬

我想为以下字符串格式创建一个模式。我有以下格式,但我卡住了,因为我无法正确扫描它。详情如下

示例字符串:
JAS 5F W 123或BWER34 23 C 23

上面的字符串有以下要遵循的规则

  • 最后的数字只能是2位或3位数字(123&&023或 (23)
  • 在此之前,只允许单个字符不区分大小写(W或c)
  • 在此之前,只允许使用2位或1位数字以及字符“f”或“f”
  • 字符串的开头可以是任意长度的任意字符串字母数字字符串。 所有的部分都被空间隔开 我提出了以下字符串模式,但当我运行java程序时,它给出了悬空的元字符

    "*\\s([0-9][fF]|[1-9][0-9])\\s([a-zA-Z])\\s(\\d\\d|\\d\\d\\d)$"
    

  • 请帮助我为上面的字符串创建正确的模式。首先,您使用量词,但不量化任何内容:删除第一个
    *
    ,或在其前面添加一些内容。这将导致“悬空元字符”消息

    第二个
    \\d\\d | \\d\\d\\d
    可以重写为
    \\d{2,3}
    (两位或三位数字)

    最后,您可以通过添加
    (?i)
    前缀使表达式不区分大小写,从而允许您按如下方式编写:

    "(?i).*\\s(\\df|[1-9]\\d)\\s([a-z])\\s(\\d{2,3})$"
    
    请注意,我假设您希望匹配查询之前的任何内容,因此我在星号前面添加了一个点:
    *
    。如果您直接使用
    模式
    (即不使用
    字符串#匹配()
    ),您甚至不需要它

    在此之前,只允许使用2位或1位数字以及字符“f”或“f”


    这是否也允许
    05
    (这是两个数字)?如果是这样,您可以将该部分重写为
    \\df | \\d{2}
    首先,您使用量词,但不量化任何内容:删除第一个
    *
    或在其前面添加一些内容。这将导致“悬空元字符”消息

    第二个
    \\d\\d | \\d\\d\\d
    可以重写为
    \\d{2,3}
    (两位或三位数字)

    最后,您可以通过添加
    (?i)
    前缀使表达式不区分大小写,从而允许您按如下方式编写:

    "(?i).*\\s(\\df|[1-9]\\d)\\s([a-z])\\s(\\d{2,3})$"
    
    请注意,我假设您希望匹配查询之前的任何内容,因此我在星号前面添加了一个点:
    *
    。如果您直接使用
    模式
    (即不使用
    字符串#匹配()
    ),您甚至不需要它

    在此之前,只允许使用2位或1位数字以及字符“f”或“f”


    这是否也允许
    05
    (这是两个数字)?如果是这样,您可以将该部分重写为
    \\df |\\d{2}

    非常感谢Thomas您的模式真的有帮助:)非常感谢Thomas您的模式真的有帮助:)