特定字符串

时间:2015-08-24 23:24:33

标签: regex url vbscript

所以,我有这个RegEx捕获我需要的特定字符串(感谢Shawn Mehan):

>?url:\'\/watch\/(video[\w-\/]*)

效果很好,但现在我需要修改我的标准。我需要捕获EACH实例之后的第一个URL:videos:[{title:。对下面的所有实例进行了粗体,并将我想要捕获的第一个网址加粗为例。

我该如何处理?我有一个VBScript将每个URL转储到一个文本文件,所以我只需要帮助从下面的blob中选择正确的URL。想一想,“如果找到这个字符串,就这样做,循环”。将regex global设置为false应该只捕获每一轮的第一个实例,对吧?一个基本的例子会有帮助。

我相信我拥有所需的所有部分,但我不太确定如何将它们组合在一起。我期待下面的代码循环并找到每个“视频:[{title:”的实例的索引,然后正则表达式根据模式获取第一个URL(regexp global设置为false),然后写找到我的文本文件的URL,循环直到找到所有文件。不工作......

(html_dump的大部分:http://pastebin.com/6i5gmeTB

Set objWshShell = Wscript.CreateObject("Wscript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set objRegExp = new RegExp
objRegExp.Global = False
objRegExp.Pattern  = ">?url:\'\/watch\/(video[\w-\/]*)"
filename = fso.GetParentFolderName(WScript.ScriptFullName)     & "\html_dump.txt" 'Text file contains html

set urldump = fso.opentextfile(filename,1,true)

do until urldump.AtEndOfStream
strLine = urldump.ReadLine()

strSearch = InStrRev(strLine, "videos:[{title:")  'Attempting to find the position of "videos:[{title:" to grab the first URL after.

If strSearch >0 then

Set myMatches = objRegExp.Execute(strLine)  'This matches the URL pattern.
For Each myMatch in myMatches
strCleanURL = myMatch.value
next

'===Writes clean urls to txt file...or, it would it if worked===

filename1 = fso.GetParentFolderName(WScript.ScriptFullName) & "\URLsClean.txt"  'Creates and writes to this file

set WriteURL = fso.opentextfile(filename1,2,true)
WriteURL.WriteLine strCleanURL
WriteURL.Close

else
End if


loop
urldump.close

var streams = [{streamID:138,cards:[{cardId:59643,cardTypeId:48,clickCount:84221,happenOn:'2015-08-17T15:30:17.000-07:00',expiredOn:''标题:'最新新闻头条',subHeader:'以下是来自世界各地的一些最新头条。',链接:'/ watch / playlist / 544 / Latest-News-Headlines',赚取:3,播放列表修订ID:3427 ,图像:'http%3A%2F%2Fpthumbnails.5min.com%2F10380591%2F519029502_3_o.jpg',imageParamPrefix:'?',size:13,durationMin:15,durationTime:'14:34',pos:0,trkId :'2gs55j6u0nz8',真实,视频:[{title:'世界上第一个天空泳池即将出现在伦敦南部',缩略图:'http%3A%2F%2Fpthumbnails.5min.com %2F10380509%2F519025436_c_140_105.jpg“ durationTime:‘0:39’,网址:” / 手表/视频/ 716424 /世界先天空池即将出现 - 在南伦敦',评级:'4.2857'},{标题:'寻宝者在西班牙硬币中找到450万美元',缩略图:'http%3A%2F%2Fpthumbnails.5min.com%2F10380462%2F519023092_3.jpg',durationTime:' 0:54' ,网址:'/手表/视频/715927/treasure-hunters-find-4-5-million-in-spanish-coins',rating:'4.25'},{title:'前总统吉米卡特称巨蟹座已经扩散到大脑',缩略图:'http% 3A%2F%2Fpthumbnails.5min.com%2F10380499%2F519024920_c_140_105.jpg 'durationTime: '1:59',网址:'/手表/视频/ 716363 /前总统 - 吉米 - 卡特说,癌症具有扩频-to-brain',评级:'2.8889'},{标题:'Josh Duggar在AshleyMadison.Com上有多个账户',缩略图:'http%3A%2F%2Fpthumbnails.5min.com%2F10380505%2F519025222_c_140_105.jpg', durationTime: '1:30',

1 个答案:

答案 0 :(得分:0)

假设您的输入来自文件且格式正确,您可以在PowerShell中执行以下操作:

$jsonfile = 'C:\path\to\input.txt'

$json = Get-Content $jsonfile -Raw | ConvertFrom-Json

$json.streams.cards | ForEach-Object { $_.videos[0].url }

以上假设streams是JSON数据中最顶层的密钥。

请注意,该代码至少需要PowerShell v3。