用于提取开关的正则表达式 /switch=value

Regex to extract switches /switch=value

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

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

我需要提取 Switch=Value 或 Switch(仅当它对 Switch3 等没有任何值时)。

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

看来你想要这个,

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

DEMO

信息不多,但这里有 perl 中的一些内容可以帮助您:

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

解析带有开关的命令行可能会很麻烦。
像下面这样的东西。

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

 / 
 ( [^ =]+ )                    # (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  

你使用回溯搜索 "switch." 并向前看第一个斜杠你必须 trim 之后的值但是你得到了值 (?<=Switch.=).+(?=/)