我有一個批處理文件,我需要從中提取開關。 交換機採用這種格式。正則表達式提取開關/開關=值
/Switch1=Value1 /Switch2="Value 2" /Switch3 /Switch4="C:\Program Files\DIR"
我需要Switch = Value或Switch(僅當它沒有任何值,例如Switch3)被提取。
我是一個初學者正則表達式。到目前爲止,我已經試過\/\w+=|\/\w+
這個表達式。但是這並沒有給我帶來價值。
我有一個批處理文件,我需要從中提取開關。 交換機採用這種格式。正則表達式提取開關/開關=值
/Switch1=Value1 /Switch2="Value 2" /Switch3 /Switch4="C:\Program Files\DIR"
我需要Switch = Value或Switch(僅當它沒有任何值,例如Switch3)被提取。
我是一個初學者正則表達式。到目前爲止,我已經試過\/\w+=|\/\w+
這個表達式。但是這並沒有給我帶來價值。
請注意,這不適用於轉義引號,即'/ foo =「\」「' –
或\/Switch \ d +(?:=(?:([」'])(?:(?!\ 1 ))* \ 1 | \ S +))? 如果做明確的屬性名稱(gi標誌) – dwkd
我沒有逃脫報價的要求,所以這對我有用。 – lostpacket
沒有太多的信息,但這裏的東西在Perl讓你去:
perl -p -i -e 'print "$1=$3\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。=)。+(?= /)
什麼是值的分隔符? – sln
您的預期產出是? –
你應該使用一個解析器/詞法分析器來處理這種東西。行情和反斜槓以及所有這些讓Looong正則表達式成爲可能。 –