繁体   English   中英

正则表达式-从重复格式中提取字符串

[英]Regular expression - Extracting strings from a repeating format

编辑-解决:
感谢您的答复-我了解到它实际上是序列化的格式,不需要使用RegEx对其进行处理。

对于newb问题的道歉-根据StackOverflow的回答,我尝试了很多变体,没有运气。 我还花了一段时间尝试使用在线Regex工具来尝试自己解决此问题。

这是我正在检查的字符串:

i:0;s:1:"1";i:1;s:1:"3";i:2;s:1:"5";i:3;s:1:"6";

我会满足于匹配这些字符串:

i:0;s:1:"1";
i:1;s:1:"3";
i:2;s:1:"5";
i:3;s:1:"6";

但理想情况下,我只想捕获引号之间的所有值。
(这些条目中可能有1-10个之间的任何位置)
即regex_result = [1,3,5,6]

这些是我尝试过的一些正则表达式。 我只能捕获第一个匹配项或最后一个匹配项,但不能捕获所有匹配项-我对正则表达式为什么不像我期望的那样“重复”感到困惑:

(i:.;s:1:".";)*

(i:.;s:1:".";)+

(i:.;s:1:".";)+?

谢谢

您可以使用此正则表达式。

/(?<=:")\d+(?=";)/g

DEMO

"([^"]*)"

试试看。看演示。

http://regex101.com/r/hQ1rP0/43

您需要使用\\G以便它将双引号内的数字加上i:.;s:1:"此处i:之后的点代表任何字符 )。锚点\\ G在以下位置匹配上一场比赛结束了。

<?php
$string = 'i:0;s:1:"1";i:1;s:1:"3";i:2;s:1:"5";i:3;s:1:"6";';
echo preg_match_all('~(?:i:.;s:1:"|(?<!^)\G)(.)(?=";)~', $string, $match);
print_r($match[1]);
?>

输出:

4Array
(
    [0] => 1
    [1] => 3
    [2] => 5
    [3] => 6
)

DEMO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM