如何使用 PHP 中的正则表达式在字符串中搜索可以按任何顺序排列的子字符串

Posted

技术标签:

【中文标题】如何使用 PHP 中的正则表达式在字符串中搜索可以按任何顺序排列的子字符串【英文标题】:How to search a string for substrings that can be in any order using regular expressions in PHP 【发布时间】:2013-03-13 07:20:04 【问题描述】:

我目前正在使用以以下格式输出 JSON 数据的 Web 服务:

"ID":1291,"Name":"Houses of the Holy","Artist":"Led Zeppelin","Year":1973

但是,从一件商品到另一件商品的顺序并不一致。例如:

"ID":2958,"Label":"Reprise Records","Name":"Electric Ladyland","Year":1968

当然,我不能编写依赖于统一顺序的属性的正则表达式,因为顺序从一个项目到下一个项目会有所不同(尽管它们总是以 ID 开头)。

我会使用 preg_split 使用 ',"' 作为分隔符,但偶尔会有一个跟踪列表,如下所示:

"ID":9237,"Tracklist":["Track1":"Taxman","Track2":"Eleanor Rigby"]

...会搞砸的。

如何使用正则表达式搜索可能以任何顺序出现或根本不出现的子字符串?还是我必须对 Web 服务返回的每个项目运行多个正则表达式,每个可能的属性一个?

【问题讨论】:

这听起来像你需要一个解析器。不能使用内置的 JSON 解析器吗? 您无法使用json_decode 吗? 我不认为正则表达式可以做你需要的。在您的情况下使用语法解析器可能会有所帮助。 +1 我最喜欢的专辑Houses of the Holy 【参考方案1】:

使用 json_decode() 应该很容易访问每个项目

$results = json_decode('"ID":2958,"Label":"Reprise Records","Name":"Electric Ladyland","Year":1968', true);
print_r($results);

输出: 大批 ( [ID] => 2958 [标签] => 重复记录 [名称] => 电动女士乐园 [年份] => 1968 )

【讨论】:

lolz.... 看起来我们在读对方的心思。一个建议使用 TRUE 和 json decode 其他明智的返回将是 simpleobject 而不是数组 感谢您的回答。很高兴看到它比我想象的要简单得多!【参考方案2】:

我想知道你为什么不想使用 json_decode()

$json_string = '"ID":1291,"Name":"Houses of the Holy","Artist":"Led Zeppelin","Year":1973';
 $json_array =json_decode($json_string,true);

输出将是

Array
(
[ID] => 1291
[Name] => Houses of the Holy
[Artist] => Led Zeppelin
[Year] => 1973
)

然后你可以按照你想要的方式操作数组

【讨论】:

以上是关于如何使用 PHP 中的正则表达式在字符串中搜索可以按任何顺序排列的子字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 php 中使用正则表达式进行排列

javascript-如何在 json 字符串上使用正则表达式来搜索 JQuery 中的数据表列?

如何忽略正则表达式主题字符串中的空格?

如何匹配所有出现的正则表达式

如何使用正则表达式删除字符串中的括号符号

如何在 PHP 中使用正则表达式匹配空格、回车和换行?