0

代码:

https://aaa.bbb.net/ccc/211099_589944494365122_1446403980_n.jpg

如何589944494365122使用正则表达式摆脱该字符串?

到目前为止我能做的最好的事情_(.*)就是589944494365122_1446403980_n.jpg

4

4 回答 4

2

首先,您应该概括您的问题描述,如下所示:如何在第一个字符串之后获得最长的非空数字子_字符串?您真正要求的正则表达式是(589944494365122),但这不是您所期望的。

根据我对你想要什么的猜测,答案可能是_(\d+).

于 2013-01-16T21:07:27.693 回答
1

这行得通;

var s = "https://aaa.bbb.net/ccc/211099_589944494365122_1446403980_n.jpg";
var m = /_([^_]*)/.exec(s);
console.log( m[1] ); // 589944494365122
于 2013-01-17T01:19:17.747 回答
1

我可以在您的输入中看到的提取规则是:

211099_589944494365122_1446403980
[0-9]+_ part we want  _[0-9]+

因此,具有后视和前瞻的正则表达式将有所帮助:

'(?<=\d_)\d+(?=_\d)'

用 grep 测试:

kent$  echo " https://aaa.bbb.net/ccc/211099_589944494365122_1446403980_n.jpg"|grep -Po '(?<=\d_)\d+(?=_\d)'
589944494365122
于 2013-01-17T00:58:07.020 回答
1

我会选择\d+_(\d+)_\d+_n\.jpg,但根据 URL 的确切规范,这可能需要一些调整。

同样取决于语言,这可能需要稍作改动。我建议的解决方案例如可以在 Ruby 中工作(以及许多其他正则表达式实现)。这里\d匹配任何数字,\d+表示一个或多个数字。我假设之前的字母.jpg总是n,但您可以通过替换n.(任何字符)或替换为\w(任何单词字符)来更改它。

于 2013-01-16T21:05:37.010 回答