繁体   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