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