- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有这个正则表达式:
/(
# define subtypes and build up the json syntax, BNF-grammar-style
# The {0} is a hack to simply define them as named groups here but not match on them yet
# I added some atomic grouping to prevent catastrophic backtracking on invalid inputs
(?<number> -?(?=[1-9]|0(?!\d))\d+(\.\d+)?([eE][+-]?\d+)?){0}
(?<boolean> true | false | null ){0}
(?<string> " (?>[^"\\\\]* | \\\\ ["\\\\bfnrt\/] | \\\\ u [0-9a-f]{4} )* " ){0}
(?<array> \[ (?> \g<json> (?: , \g<json> )* )? \s* \] ){0}
(?<pair> \s* \g<string> \s* : \g<json> ){0}
(?<object> \{ (?> \g<pair> (?: , \g<pair> )* )? \s* \} ){0}
(?<json> \s* (?> \g<number> | \g<boolean> | \g<string> | \g<array> | \g<object> ) \s* ){0}
)
\A \g<json> \Z
/uix
我有一个应该返回 JSON 的 API,但我的一些客户在他们的 API 中安装了其他插件,现在我的响应包含其他非 JSON 字符,但 JSON 在响应字符串中。
我认为此正则表达式不起作用,因为转义字符未被 <string>
识别图案。如果我在被识别为 <string>
的模式中有引号它与模式不匹配。如果我有一个 HTML 字符串值并且其中一个元素有一个属性,就会发生这种情况,如下所示:
<div itemscope itemtype=\\\"http:\\/\\/schema.org\\/Recipe\\\" id=\\\"zlrecipe-container\\\" class=\\\"serif zlrecipe\\\"></div>
这里是 an example我收到的回复。我想提取我的 JSON block 并忽略其余部分。
最佳答案
首先,你忘记了一个 "
在您的测试 JSON 字符串中,就在 <\/a><\/div>
之后, 所以它不是有效的 JSON。
我使用以下字符串进行了测试,这是您更正且未转义的示例:
b<---------------->{"status":"ok","plugin_version":"1.2.6","post":{"id":7598,"type":"post","slug":"honeycrisp-apple-sangria-recipe","url":"http:\/\/www.bigbigbutts.com\/2013\/08\/honeycrisp-apple-sangria-recipe\/","status":"publish","title":"Honeycrisp Apple Sangria Recipe","title_plain":"Honeycrisp Apple Sangria Recipe","content":"<div class=\"pin-it-btn-wrapper\"><a href=\"\/\/www.pinterest.com\/pin\/create\/button\/?url=http%3A%2F%2Fwww.bigbigbutts.c…crisp-apple-sangria.jpg&description=Honeycrisp%20Apple%20Sangria%20Recipe\" data-pin-do=\"buttonBookmark\" data-pin-config=\"none\" rel=\"nobox\"><\/a><\/div>","raw_content":"","excerpt":"","date":"2013-08-24T11:18:07+00:00","modified":"2014-04-24T09:45:00+00:00","author":{"id":2,"slug":"gia","name":"gia","first_name":"gia","last_name":"Wenner chia","nickname":"gia","url":"http:\/\/giawennerchia.com","description":"gia Wenner chia is a writer and mom who gets paid to obsess over Pinterest and blogs for Ahalogy, a Cincinnati-based startup. She lives in her hometown of West Chester, Ohio, with her husband, two young children, and their dog."},"attachments":[{"id":7599,"url":"http:\/\/www.bigbigbutts.com\/wp-content\/uploads\/2013\/08\/honeycrisp-apple-sangria.jpg","slug":"honeycrisp-apple-sangria","title":"honeycrisp-apple-sangria","description":"","caption":"","parent":7598,"mime_type":"image\/jpeg","images":{"full":{"url":"http:\/\/www.bigbigbutts.com\/wp-content\/uploads\/2013\/08\/honeycrisp-apple-sangria.jpg","width":580,"height":406},"thumbnail":{"url":"http:\/\/www.bigbigbutts.com\/wp-content\/uploads\/2013\/08\/honeycrisp-apple-sangria-150x150.jpg","width":150,"height":150},"medium":{"url":"http:\/\/www.bigbigbutts.com\/wp-content\/uploads\/2013\/08\/honeycrisp-apple-sangria-300x210.jpg","width":300,"height":210},"large":{"url":"http:\/\/www.bigbigbutts.com\/wp-content\/uploads\/2013\/08\/honeycrisp-apple-sangria.jpg","width":580,"height":406},"Mini Square":{"url":"http:\/\/www.bigbigbutts.com\/wp-content\/uploads\/2013\/08\/honeycrisp-apple-sangria-70x70.jpg","width":70,"height":70},"Square":{"url":"http:\/\/www.bigbigbutts.com\/wp-content\/uploads\/2013\/08\/honeycrisp-apple-sangria-115x115.jpg","width":115,"height":115},"Featured Tabs":{"url":"http:\/\/www.bigbigbutts.com\/wp-content\/uploads\/2013\/08\/honeycrisp-apple-sangria-150x225.jpg","width":150,"height":225}}}],"featured_image":{"id":7599,"url":"http:\/\/www.bigbigbutts.com\/wp-content\/uploads\/2013\/08\/honeycrisp-apple-sangria.jpg","slug":"honeycrisp-apple-sangria","title":"honeycrisp-apple-sangria","description":"","caption":"","parent":7598,"mime_type":"image\/jpeg","images":{"full":{"url":"http:\/\/www.bigbigbutts.com\/wp-content\/uploads\/2013\/08\/honeycrisp-apple-sangria.jpg","width":580,"height":406},"thumbnail":{"url":"http:\/\/www.bigbigbutts.com\/wp-content\/uploads\/2013\/08\/honeycrisp-apple-sangria-150x150.jpg","width":150,"height":150},"medium":{"url":"http:\/\/www.bigbigbutts.com\/wp-content\/uploads\/2013\/08\/honeycrisp-apple-sangria-300x210.jpg","width":300,"height":210},"large":{"url":"http:\/\/www.bigbigbutts.com\/wp-content\/uploads\/2013\/08\/honeycrisp-apple-sangria.jpg","width":580,"height":406},"Mini Square":{"url":"http:\/\/www.bigbigbutts.com\/wp-content\/uploads\/2013\/08\/honeycrisp-apple-sangria-70x70.jpg","width":70,"height":70},"Square":{"url":"http:\/\/www.bigbigbutts.com\/wp-content\/uploads\/2013\/08\/honeycrisp-apple-sangria-115x115.jpg","width":115,"height":115},"Featured Tabs":{"url":"http:\/\/www.bigbigbutts.com\/wp-content\/uploads\/2013\/08\/honeycrisp-apple-sangria-150x225.jpg","width":150,"height":225}}}}}<random shit><dafkdjkfjdak
接下来,正则表达式。那些\A
和 \Z
是错误的,因为只有当 JSON 是唯一的字符串内容时,它们才会使模式匹配。
然后,您在 string
中放置了过多的反斜杠子模式。替换 \\\\
与 \\
.
另一个问题是 [^"\\]*
参与 string
子模式。替换 *
与 +
或 ++
, 因为整个原子团已经有一个 *
上的量词。
这是工作正则表达式,PCRE 风格:
(?(DEFINE)
(?<number> -?(?=[1-9]|0(?!\d))\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)
(?<boolean> true | false | null )
(?<string> " (?:[^"\\]++ | \\ ["\\bfnrt\/] | \\ u [0-9a-f]{4} )* " )
(?<array> \[ (?> \g<json> (?: , \g<json> )* )? \s* \] )
(?<pair> \s* \g<string> \s* : \g<json> )
(?<object> \{ (?> \g<pair> (?: , \g<pair> )* )? \s* \} )
(?<json> \s* (?> \g<number> | \g<boolean> | \g<string> | \g<array> | \g<object> ) \s*)
)
\g<json>
演示:http://regex101.com/r/tS8cW7/1
我仍然认为不需要某些原子团,但它们毕竟无害。
现在,由于您使用的是 ruby (Oniguruma),因此您不能使用 (?(DEFINE)...)
句法。你的{0}
技巧很好,但在一个地方使用它就足够了:
(?:
(?<number> -?(?=[1-9]|0(?!\d))\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)
(?<boolean> true | false | null )
(?<string> " (?:[^"\\]++ | \\ ["\\bfnrt\/] | \\ u [0-9a-f]{4} )* " )
(?<array> \[ (?> \g<json> (?: , \g<json> )* )? \s* \] )
(?<pair> \s* \g<string> \s* : \g<json> )
(?<object> \{ (?> \g<pair> (?: , \g<pair> )* )? \s* \} )
(?<json> \s* (?> \g<number> | \g<boolean> | \g<string> | \g<array> | \g<object> ) \s*)
){0}
\g<json>
关于将在字符串中间找到 JSON 对象的 Ruby 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25273624/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!