-1

这是我的字符串:

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;}}

我只是想7025467. 该数字的长度可能不同,但始终以引号开头702546并始终以引号结尾。

所以我最终的选择是7025462932180014917

4

3 回答 3

0

使用这个正则表达式(?<=")(702546\d+)(?=")

如果你的正则表达式引擎不支持后向使用这个正则表达式"(702546\d+)"匹配将在第 1 组

于 2012-09-05T20:23:57.867 回答
0

基本的正则表达式是702546[^"]*匹配任何这样的字符串,但您可能希望使用某种编程语言来实际提取这些字符串。

vnix$ grep -o '702546[^"]*' file

或者在脚本语言中,类似这样的东西;

perl -nle 'print $1 while m/(702546[^"]*)/g' file

不过,您的问题描述使我相信这实际上不是您应该做的。 你真正想解决什么问题?

于 2012-09-05T20:27:40.813 回答
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

基本上,零宽度断言仅意味着该值必须存在才能使匹配成功,但该值不会成为匹配的一部分。我们在这里使用它们是因为我们希望确保该值包含在引号中,而不是使引号成为我们匹配的一部分。

于 2012-09-05T20:27:42.323 回答