2011-12-27 21 views
1

我想为以下字符串格式创建模式。我使用了以下格式,但由于无法正确扫描,导致卡住了。以下是详细内容字符串的悬摆元字符和正则表达式模式

示例串:JAS 5F W 123 or 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)$" 
    

请帮我在创造上面的字符串

回答

1

首先你使用一个量词,但不定量任何的正确模式:删除第一个*或之前将其添加的东西。这会导致“悬挂的元字符”消息。

第二个\\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()),您甚至不需要这样做。

在此之前,只有2位数字或一位数字和一个字符只允许“f”或“F”。

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

+0

非常感谢托马斯你的模式真的帮助:) – cryptonkid 2011-12-27 08:13:43