gpt4 book ai didi

java - 字符串的悬挂元字符和正则表达式模式

转载 作者:太空宇宙 更新时间:2023-11-04 08:25:27 33 4
gpt4 key购买 nike

我想为以下格式的字符串创建一个模式。我提供了以下格式,但由于无法正确扫描而陷入困境。下面是详细内容

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

以上字符串需要遵循以下规则。

  1. 最后一位数字只能是 2 位或 3 位数字(123 && 023 或23)
  2. 在此之前,只允许使用单个字符,不区分大小写(W 或 c)
  3. 在此之前,仅允许使用 2 位数字或一位数字加一个字符“f”或“F”。
  4. 字符串的开头可以是任何长度的任何字符串字母数字字符串。所有部分均由空格分隔我想出了以下字符串模式,但是当我运行我的 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})$"

请注意,我假设您想要匹配查询之前的任何内容,因此我在星号前添加了一个点:.*。如果您直接使用Pattern(即不是String#matches()),您甚至不需要它。

Before that only 2 digits or one digit and a character only "f"or"F" is allowed.

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

关于java - 字符串的悬挂元字符和正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8642093/

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