我有一个批处理文件,我需要从中提取开关。 交换机采用这种格式。
/Switch1=Value1 /Switch2="Value 2" /Switch3 /Switch4="C:\Program Files\DIR"
我需要提取Switch = Value或Switch(仅当它没有任何值,例如Switch3)。
我是正则表达式的初学者。到目前为止,我已经尝试了\/\w+=|\/\w+
这个表达式。但这并没有给我一个价值。
答案 0 :(得分:0)
答案 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)
你使用回顾搜索“开关”。并且预先查看第一个斜线,你必须修改值,但是你得到了值 。(小于?=开关=)+(?= /)