簡體   English   中英

IP地址的Sed表達式,匹配組得到意外結果

[英]Sed expression for IP address, getting unexpected result for matching group

我正在嘗試從文本中提取IP地址,並且根據我編寫的正則表達式不理解結果。 大概是這樣的:

echo '"IPAddress": "173.14.0.3",' | sed -n -r -e 's/"IPAddress": "(.*)"/\1/p'

退貨

173.14.0.3,

為什么我得到的,在結束了嗎? "(.*)"不會指示正則表達式創建最后兩個"之間的所有內容的匹配組嗎?

最初我是從

echo '"IPAddress": "173.14.0.3",' | sed -n -r -e 's/"IPAddress": "([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})"/\1/p'

,但結果相同。 我使用了regex101 ,並且得到了不同的響應。 為什么?

您的輸入:

input:            "IPAddress": "173.14.0.3",
matched by regex: ^^^^^^^^^^^^^^^^^^^^^^^^^  (note: comma not matched)
captured:                       ^^^^^^^^^^

匹配的部分被捕獲的子字符串替換,並替換回原始字符串,從而產生:

result:       173.14.0.3,
not affected:           ^
replacement:  ^^^^^^^^^^

如果要擺脫逗號,請將其包含在匹配項中(這樣它就不會被替換):

s/"IPAddress": "(.*)",/\1/p

regex101顯示相同的行為: https ://regex101.com/r/Fy5Lj3/4

一般的建議:regex101.com 支持支持正則表達式語言sed 這些在POSIX規范中進行了說明。

雖然簡單的事情, 可能看起來很相似,表達了詳細顯著不同 正則表達式的工作時, 不要使用regex101 sed

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM