java - 解析特殊格式的字符串

标签 java regex string

<分区>

我有一个遗留应用程序,它以一种特殊的格式将数据存储在数据库中

例如我有以下字符串

a:4:{i:0;s:4:"a’";i:1;s:6:"abcdef";i:2;s:5:"abcde";i:3;s:3:"xyz";}

表示以下四个单独的字符串:

  1. 一个’
  2. abcdef
  3. 开始
  4. 某某

粗略一看,s 后面的参数是对应字符串的长度。然而,这不是第一个字符串的情况,其中 s 之后的预期参数应该是 2 而不是 4

截至目前,我正在通过以下方法解析此字符串:

首先通过正则表达式获取 i:0;s:4:"a'";i:1;s:6:"abcdef";i:2;s:5:"abcde";i:3 ;s:3:"xyz";

然后通过正则表达式 ^i:\d+;s:(\d+):"(.+)$ 得到 len = 4a'";i:1;s:6:"abcdef";i:2;s:5:"abcde";i:3;s:3:"xyz"; 通过取前 4 个字符获得第一个选项(这在这里不起作用,因为 len 应该是 2),然后得到 i:1;s:6:"abcdef";i:2;s:5:"abcde"; i:3;s:3:"xyz"; 并进一步迭代。

我最初也曾尝试通过正则表达式 i:\d*;s:\d*:"([^;]*)"; 一次解析所有内容,但这行不通如果字符串包含这个模式(s 之后的参数应该是执行此操作的明确方法)。

我还检查了如果字符串是 a’Δ 则参数变为 6。

您建议我如何处理此类字符串(带有特殊字符),您能告诉我这种格式是什么以及如何解析它吗?

PS:我用的是java

最佳答案

这是序列化的 PHP 数组。所以你需要的只是反序列化它。

使用正则表达式很容易导致您不会涵盖此处使用的序列化函数中实现的某些数据格式的情况。

认为此主题有帮助:Serialize PHP => Unserialize JAVA / Serialize for php in string format

关于java - 解析特殊格式的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30397186/

相关文章:

string - 最简洁的提取文件扩展名的方法

java - 线程中的异常 "AWT-EventQueue-0"java.lang.ArrayIndexOutOfBoundsException : 100

java - 在 Eclipse 中链接到生成的 Java protobuf 代码

javascript - 正则表达式西类牙语和阿拉伯语单词

string - Lua:String.match vs String.gmatch?

python 3.5 : search different values in a list

java - XML 解析 - 从特定节点解析文本时出现问题

java - 启动 IBM InstallationManager 失败并出现以下错误

c++ - 测试字符串是否以数字开头

php - 帮助密码复杂性正则表达式