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
上面的字符串有以下要遵循的规则
"*\\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您的模式真的有帮助:)