代码:正则表达式串变换/提取
https://aaa.bbb.net/ccc/211099_589944494365122_1446403980_n.jpg
我怎样才能得到589944494365122
出使用正则表达式该字符串的?
我到目前为止做的最好的是_(.*)
导致589944494365122_1446403980_n.jpg
代码:正则表达式串变换/提取
https://aaa.bbb.net/ccc/211099_589944494365122_1446403980_n.jpg
我怎样才能得到589944494365122
出使用正则表达式该字符串的?
我到目前为止做的最好的是_(.*)
导致589944494365122_1446403980_n.jpg
我会\d+_(\d+)_\d+_n\.jpg
去,但根据URL的确切的规格,这可能需要的调整的一点点。
也取决于语言,这可能需要稍微改变一点。我建议的解决方案将用于例如Ruby(以及许多其他正则表达式实现)。这里\d
匹配任何数字,\d+
表示一个或多个数字。我认为.jpg
前面的字母总是n
但你可以由替换n
与.
(任何字符)或\w
(任何单词字符)改变这一点。
为了避免混淆,我觉得最好是以“规范”形式显示正则表达式。换句话说,除非你用(例如)一个Java字符串的形式(例如'\\ d +“')呈现正则表达式,否则不要加倍反斜杠。 –
我曾经写过类似这样的正则表达式,但我经常遇到这个问题'但是你的正则表达式不适用于X语言',结果原因是反冲没有被转义。因此,为了节省一个答案,我现在添加'逃脱'版本。 –
首先,你应当概括您的问题描述,这样的:我怎样才能在字符串中的第一个_
后位数最长的非空字符串?你字面上要求的正则表达式是(589944494365122)
,但那不是你所期望的。
据我你想要什么猜测,答案可能是_(\d+)
。
描述缺乏质量造成我的语言障碍和正则表达式的经验。你的答案完成了这项工作。万分感谢。 – kristjanzzz
提取的,我可以在你输入看到的规律是:
'(?<=\d_)\d+(?=_\d)'
使用grep测试:
211099_589944494365122_1446403980
[0-9]+_ part we want _[0-9]+
所以与向后看,并先行将帮助正则表达式
kent$ echo " https://aaa.bbb.net/ccc/211099_589944494365122_1446403980_n.jpg"|grep -Po '(?<=\d_)\d+(?=_\d)'
589944494365122
This works;
var s = "https://aaa.bbb.net/ccc/211099_589944494365122_1446403980_n.jpg";
var m = /_([^_]*)/.exec(s);
console.log(m[1]); // 589944494365122
是URL静态的?或者周围的值改变了吗? –
是的,他们会改变 – kristjanzzz