我需要通过正则表达式提取JSON字段的值,(我不能使用JSON解码)。
对于这个字符串:
"url":"http://stackoverflow.com/orwell", "domain":"netcharles.com", "title":"Orwell Essays & Journalism Section - Charles George Orwell Links", "tags":["orwell","writing","literature","journalism","essays","politics","essay","reference","language","toread"], "index":2931, "time_created":1345419323, "num_saves":24
我想得到domain
的值,我找到了this和其他一些解决方案,当我在regex101中测试它们时,它们几乎可以工作,但当使用PHP时,它们didn't work as expected;知道为什么吗!
字符串可以在逗号之后和双引号之前有空格,也可以没有。
更新:
字符串不完全是json,也不足以通过添加括号将其转换为json,只有一部分字符串像json。
它总是包含像"name": "david","email": "some email"
这样的东西,我需要从那部分获取数据,string的结构是(anything here) "field1": "value1", "field2":"value2" (anything here)
1条答案
按热度按时间jv2fixgn1#
这只是你的模式中反斜线的数量的问题。我知道,这是相当奇怪的,因为你可以有效地编写一个PHP单引号字符串,如
'\s'
和反斜杠将被视为反斜杠。但是如果你写'\\s'
,它将包含相同的字符串。所以有时候,为了在PHP中更容易地创建正则表达式,可以使用nowdoc语法。nowdoc语法将按字面意思处理字符串,因此反斜杠将被视为它们。就像单引号字符串一样,它也不计算其内容,因此不查找其内容中的变量,与双引号字符串或heredoc语法相反。
它使用nowdoc语法处理以下代码,以便更好地理解正则表达式:
我删除了“domain”周围的第一个捕获组,因为没有必要捕获它。我还在内部重复捕获组中添加了
?:
,使其成为非捕获组。我看不出有任何理由获得域值的最后一个字符。您还可以使用
(?<group_name> )
创建命名捕获组。这就是我在这里做的:https://onlinephp.io/c/9b024