这是我的字符串:
a:1:{i:0;a:4:{s:1:"i";s:5:"19807";s:1:"c";s:19:"7025462932180014917";s:1:"a";
d:88.719999999999998863131622783839702606201171875;s:2:"ba";
d:88.719999999999998863131622783839702606201171875;}}
我只想提取以702546
开头的部分,并在7
之后的双引号之前结束。该数字可能是不同的长度,但始终以702546
开头,并始终以引号结束。
所以我的最终选择是7025462932180014917
。
答案 0 :(得分:0)
使用此正则表达式(?<=")(702546\d+)(?=")
如果你的正则表达式引擎不支持lookbehind使用这个正则表达式"(702546\d+)"
匹配将在第1组
答案 1 :(得分:0)
基本的正则表达式是702546[^"]*
来匹配任何类似的字符串,但你可能想要使用某种编程语言来实际将它们拉出来。
vnix$ grep -o '702546[^"]*' file
或者用脚本语言,就像这样;
perl -nle 'print $1 while m/(702546[^"]*)/g' file
你的问题描述让我相信这实际上并不是你应该做的事情。 What problem are you really trying to solve?
答案 2 :(得分:0)
根据您使用的技术/语言,这可能会有所不同,但基本上您可以使用类似的东西
(?<=")702546\d+(?=")
如果您的字符串中没有以702546开头的其他数字的风险,则第一个(?<=")
可能会过度。
打破这个局面:
(?<=") // a zero-width assertion (lookbehind), so we will only match if preceded by double-quotes
702546 // literal match
\d+ // one or more additional digits
(?=") // another zero-width assertion (lookahead), so we will only match if followed by double-quotes
基本上,零宽度断言只是意味着值必须存在才能使匹配成功,但该值不会成为匹配的一部分。我们在这里使用它们是因为我们希望确保将值括在引号中,而不将引号作为匹配的一部分。