用于提取开关的正则表达式 /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+))?
信息不多,但这里有 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.=).+(?=/)
我有一个需要从中提取开关的批处理文件。 开关采用这种格式。
/Switch1=Value1 /Switch2="Value 2" /Switch3 /Switch4="C:\Program Files\DIR"
我需要提取 Switch=Value 或 Switch(仅当它对 Switch3 等没有任何值时)。
我是正则表达式的初学者。到目前为止,我已经尝试过 \/\w+=|\/\w+
这个表达式。但这并没有给我价值。
看来你想要这个,
\/\w+(?:=(?:(["'])(?:(?!).)*|\S+))?
信息不多,但这里有 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.=).+(?=/)