[英]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.