代码之家  ›  专栏  ›  技术社区  ›  Stéphane GRILLON

Java正则表达式包含2个值(内部值相同)

  •  0
  • Stéphane GRILLON  · 技术社区  · 7 年前
    String input = " Fa0/1     --- Cisco IP phone notconnected   20       a-full    auto    10/100BaseTX"
    String DISABLED = "disabled";
    String CONNECTED = "connected";
    String NOTCONNECTED = "notconnected";    
    String REGEXP_STATUS = "^(\\s*)(\\w+/\\d+|\\w+/\\d+/\\d+)(\\s+)(.*|\\*|-)(" + NOTCONNECTED + "|" + DISABLED + "|" + CONNECTED + ")(\\s+)(\\d+|trunk)(\\s+)(\\w+|a-\\w+)(\\s+)(\\w+|a-\\d+)(\\s+)(\\w+|/+).*";
    

    matcher.group(5) 返回 CONNECTED 如果输入是 NOTCONNECTED 因为 有联系的 消息不在 有联系的

    编辑:

    我尝试:

    String REGEXP_STATUS = "^(\\s*)(\\w+/\\d+|\\w+/\\d+/\\d+)(\\s+)(.*|\\*|-)(" + DISABLED + "|.*" + CONNECTED + ")(\\s+)(\\d+|trunk)(\\s+)(\\w+|a-\\w+)(\\s+)(\\w+|a-\\d+)(\\s+)(\\w+|/+).*";
    

    返回 和 matcher.group(4) 返回 --- Cisco IP phone not

    1 回复  |  直到 7 年前
        1
  •  1
  •   user557597 user557597    7 年前

    将其更改为使用惰性量词 .*?
    但是,这些交替部分(*? | \* | - ) 永远不会被触动。

    readable

     ^ 
     ( \s* )                                 # (1)
     ( \w+ / \d+ | \w+ / \d+ / \d+ )         # (2)
     ( \s+ )                                 # (3)
     ( .*? )                                 # (4)
     (                                       # (5 start)
          notconnected
       |  
          disabled
       |  
          connected
     )                                       # (5 end)
     ( \s+ )                                 # (6)
     ( \d+ | trunk )                         # (7)
     ( \s+ )                                 # (8)
     ( \w+ | a- \w+ )                        # (9)
     ( \s+ )                                 # (10)
     ( \w+ | a- \d+ )                        # (11)
     ( \s+ )                                 # (12)
     ( \w+ | /+ )                            # (13)
     .* 
    

    输出

     **  Grp 0 -  ( pos 0 : len 87 ) 
     Fa0/1     --- Cisco IP phone -  notconnected   20       a-full    auto    10/100BaseTX  
     **  Grp 1 -  ( pos 0 : len 1 ) 
    
     **  Grp 2 -  ( pos 1 : len 5 ) 
    Fa0/1  
     **  Grp 3 -  ( pos 6 : len 5 ) 
    
     **  Grp 4 -  ( pos 11 : len 22 ) 
    --- Cisco IP phone -    
     **  Grp 5 -  ( pos 33 : len 12 ) 
    notconnected  
     **  Grp 6 -  ( pos 45 : len 3 ) 
    
     **  Grp 7 -  ( pos 48 : len 2 ) 
    20  
     **  Grp 8 -  ( pos 50 : len 7 ) 
    
     **  Grp 9 -  ( pos 57 : len 6 ) 
    a-full  
     **  Grp 10 -  ( pos 63 : len 4 ) 
    
     **  Grp 11 -  ( pos 67 : len 4 ) 
    auto  
     **  Grp 12 -  ( pos 71 : len 4 ) 
    
     **  Grp 13 -  ( pos 75 : len 2 ) 
    10