Pattern AST
  
      |    repeated files
    SP|       { //[^#]+ depot-path }#{:int rev} - {:word action} {#}
    SP|       change {:int change} \({ [\w\+]+ file-type }\)\n
      |    end
MatchRepeated    (name: files)
    MatchValue    (name: depot-path, scalar)
        MatchRegex '//[^#]+'
    MatchLiteral '#'
    MatchSubpattern (anon)
    MatchLiteral ' - '
    MatchSubpattern (anon)
    MatchLiteral ' '
    MatchLiteral 'change '
    MatchSubpattern (anon)
    MatchRegex ' \\('
    MatchValue    (name: file-type, scalar)
        MatchRegex '[\\w\\+]+'
    MatchRegex '\\)\\n'
Input String Captured JSON
//public/perforce/faq/admin.html#8 - edit change 6026 (text)
//public/perforce/faq/beginner.html#1 - add change 6133 (text)
//public/perforce/faq/br01.html#2 - delete change 5415 (text+ko)
//public/perforce/faq/br02.html#2 - delete change 5415 (text+ko)
//public/perforce/faq/br03.html#2 - delete change 5415 (text+ko)
//public/perforce/faq/br04.html#2 - delete change 5415 (text+ko)
//public/perforce/faq/br05.html#2 - delete change 5415 (text+ko)
//public/perforce/faq/br06.html#2 - delete change 5415 (text+ko)
//public/perforce/faq/br07.html#2 - delete change 5415 (text+ko)
//public/perforce/faq/br08.html#2 - delete change 5415 (text+ko)
//public/perforce/faq/br09.html#2 - delete change 5415 (text+ko)
//public/perforce/faq/br10.html#2 - delete change 5415 (text+ko)
//public/perforce/faq/br11.html#2 - delete change 5415 (text+ko)
//public/perforce/faq/br12.html#2 - delete change 5415 (text+ko)
//public/perforce/faq/br13.html#2 - delete change 5415 (text+ko)
//public/perforce/faq/branching.html#2 - delete change 5415 (text+ko)
//public/perforce/faq/build.html#9 - edit change 6026 (text)
//public/perforce/faq/index.html#13 - edit change 6026 (text+ko)
//public/perforce/faq/syncup.pl#2 - delete change 45 (text+ko)
{
  "files": [
    {
      "depot-path": "//public/perforce/faq/admin.html", 
      "action": "edit", 
      "file-type": "text", 
      "rev": 8, 
      "change": 6026
    }, 
    {
      "depot-path": "//public/perforce/faq/beginner.html", 
      "action": "add", 
      "file-type": "text", 
      "rev": 1, 
      "change": 6133
    }, 
    {
      "depot-path": "//public/perforce/faq/br01.html", 
      "action": "delete", 
      "file-type": "text+ko", 
      "rev": 2, 
      "change": 5415
    }, 
    {
      "depot-path": "//public/perforce/faq/br02.html", 
      "action": "delete", 
      "file-type": "text+ko", 
      "rev": 2, 
      "change": 5415
    }, 
    {
      "depot-path": "//public/perforce/faq/br03.html", 
      "action": "delete", 
      "file-type": "text+ko", 
      "rev": 2, 
      "change": 5415
    }, 
    {
      "depot-path": "//public/perforce/faq/br04.html", 
      "action": "delete", 
      "file-type": "text+ko", 
      "rev": 2, 
      "change": 5415
    }, 
    {
      "depot-path": "//public/perforce/faq/br05.html", 
      "action": "delete", 
      "file-type": "text+ko", 
      "rev": 2, 
      "change": 5415
    }, 
    {
      "depot-path": "//public/perforce/faq/br06.html", 
      "action": "delete", 
      "file-type": "text+ko", 
      "rev": 2, 
      "change": 5415
    }, 
    {
      "depot-path": "//public/perforce/faq/br07.html", 
      "action": "delete", 
      "file-type": "text+ko", 
      "rev": 2, 
      "change": 5415
    }, 
    {
      "depot-path": "//public/perforce/faq/br08.html", 
      "action": "delete", 
      "file-type": "text+ko", 
      "rev": 2, 
      "change": 5415
    }, 
    {
      "depot-path": "//public/perforce/faq/br09.html", 
      "action": "delete", 
      "file-type": "text+ko", 
      "rev": 2, 
      "change": 5415
    }, 
    {
      "depot-path": "//public/perforce/faq/br10.html", 
      "action": "delete", 
      "file-type": "text+ko", 
      "rev": 2, 
      "change": 5415
    }, 
    {
      "depot-path": "//public/perforce/faq/br11.html", 
      "action": "delete", 
      "file-type": "text+ko", 
      "rev": 2, 
      "change": 5415
    }, 
    {
      "depot-path": "//public/perforce/faq/br12.html", 
      "action": "delete", 
      "file-type": "text+ko", 
      "rev": 2, 
      "change": 5415
    }, 
    {
      "depot-path": "//public/perforce/faq/br13.html", 
      "action": "delete", 
      "file-type": "text+ko", 
      "rev": 2, 
      "change": 5415
    }, 
    {
      "depot-path": "//public/perforce/faq/branching.html", 
      "action": "delete", 
      "file-type": "text+ko", 
      "rev": 2, 
      "change": 5415
    }, 
    {
      "depot-path": "//public/perforce/faq/build.html", 
      "action": "edit", 
      "file-type": "text", 
      "rev": 9, 
      "change": 6026
    }, 
    {
      "depot-path": "//public/perforce/faq/index.html", 
      "action": "edit", 
      "file-type": "text+ko", 
      "rev": 13, 
      "change": 6026
    }, 
    {
      "depot-path": "//public/perforce/faq/syncup.pl", 
      "action": "delete", 
      "file-type": "text+ko", 
      "rev": 2, 
      "change": 45
    }
  ]
}

This HTML fragment was automatically generated from the test cases for JSON Pattern.