正则表达式提取开关/开关=值

时间:2015-01-12 17:17:56

标签: regex

我有一个批处理文件,我需要从中提取开关。 交换机采用这种格式。

/Switch1=Value1 /Switch2="Value 2" /Switch3 /Switch4="C:\Program Files\DIR"

我需要提取Switch = Value或Switch(仅当它没有任何值,例如Switch3)。

我是正则表达式的初学者。到目前为止,我已经尝试了\/\w+=|\/\w+这个表达式。但这并没有给我一个价值。

4 个答案:

答案 0 :(得分:0)

好像你想要这个,

\/\w+(?:=(?:(["'])(?:(?!\1).)*\1|\S+))?

DEMO

答案 1 :(得分:0)

信息不多,但是perl中的内容可以帮助您:

perl -p -i -e 'print "$1=$3\n" if /\/(\w+)(=((\"[^"]*\")|\S+))?/;'

答案 2 :(得分:0)

使用开关解析命令行会变得多毛 像下面的东西。

 # /([^ =]+)(?:=(?|"((?:[^"\\]*(?:\\.|[^"\\]*)*))"|([^ ]*)))?

 / 
 ( [^ =]+ )                    # (1)
 (?:
      = 
      (?|
           "
           (                             # (2 start)
                (?:
                     [^"\\]* 
                     (?:
                          \\ . 
                       |  
                          [^"\\]* 
                     )*
                )
           )                             # (2 end)
           "
        |  
           ( [^ ]* )                     # (2)
      )
 )?

输出

 **  Grp 0 -  ( pos 0 , len 15 ) 
/Switch1=Value1  
 **  Grp 1 -  ( pos 1 , len 7 ) 
Switch1  
 **  Grp 2 -  ( pos 9 , len 6 ) 
Value1  

-------------------

 **  Grp 0 -  ( pos 16 , len 18 ) 
/Switch2="Value 2"  
 **  Grp 1 -  ( pos 17 , len 7 ) 
Switch2  
 **  Grp 2 -  ( pos 26 , len 7 ) 
Value 2  

-------------------

 **  Grp 0 -  ( pos 35 , len 8 ) 
/Switch3  
 **  Grp 1 -  ( pos 36 , len 7 ) 
Switch3  
 **  Grp 2 -  NULL 

-------------------

 **  Grp 0 -  ( pos 44 , len 31 ) 
/Switch4="C:\Program Files\DIR"  
 **  Grp 1 -  ( pos 45 , len 7 ) 
Switch4  
 **  Grp 2 -  ( pos 54 , len 20 ) 
C:\Program Files\DIR  

答案 3 :(得分:0)

你使用回顾搜索“开关”。并且预先查看第一个斜线,你必须修改值,但是你得到了值 。(小于?=开关=)+(?= /)