Blackstar Posted December 9, 2006 Share Posted December 9, 2006 Is this coding right? Trying out StringRegExp first time and using newest AutoIT build...I wanted StringRegExp to extract numbers between &pid= and &page=, up to 7 digits number but I ran a test on the code below and I got blank result in msgbox, whats wrong here? CODEDim $URL, $PID $URL = "http://anywhere.com/view?f=catagory&pid=99453&page=1&order=down" $PID = StringRegExp($URL, "(?:&pid=)([0-9]{1,7})(?:&page=)", 1) MsgBox(0,"Result", $PID) Thanks. Link to comment Share on other sites More sharing options...
xcal Posted December 9, 2006 Share Posted December 9, 2006 (edited) StringRegExp drives me crazy. I wish there were better examples/explanations in the help file. But one thing I can tell you, you've set option 1, which returns an array. edit - Think I found the solution, though... $URL = "http://anywhere.com/view?f=catagory&pid=99453&page=1&order=down" $PID = StringRegExp($URL, 'pid=(.*?)\&page', 1, 1) If IsArray($PID) Then For $i = 0 To UBound($PID) - 1 MsgBox(0, '', $PID[$i]) Next EndIf Edited December 9, 2006 by xcal How To Ask Questions The Smart Way Link to comment Share on other sites More sharing options...
Uten Posted December 9, 2006 Share Posted December 9, 2006 You could also do it like this (The array point is correct by @xcal) #include <array.au3> Dim $URL, $PID $URL = "http://anywhere.com/view?f=catagory&pid=99453&page=1&order=down" $PID = StringRegExp($URL, "&pid=(\d+)&page=", 3) ;Note 3 to get a global search _ArrayDisplay($PID, "test") Please keep your sig. small! Use the help file. Search the forum. Then ask unresolved questions :) Script plugin demo, Simple Trace udf, TrayMenuEx udf, IOChatter demo, freebasic multithreaded dll sample, PostMessage, Aspell, Code profiling Link to comment Share on other sites More sharing options...
JSThePatriot Posted December 9, 2006 Share Posted December 9, 2006 This is how I would have set it up, though yours seems to be fine. Just set it to search through in a loop. Dim $URL, $PID Dim $linePattern $linePattern = '(?i)(?:pid=)(\d*)' $URL = "http://anywhere.com/view?f=catagory&pid=99453&page=1&order=down" $PID = StringRegExp($URL, $linePattern, 3) For $i = 0 To UBound($PID) - 1 Step 1 MsgBox(0,"Result", $PID[$i]) Next I hope that helps. xcal has given same basic answer. Loop is what you were missing. JS AutoIt Links File-String Hash Plugin Updated! 04-02-2008 Plugins have been discontinued. I just found out. ComputerGetInfo UDF's Updated! 11-23-2006 External Links Vortex Revolutions Engineer / Inventor (Web, Desktop, and Mobile Applications, Hardware Gizmos, Consulting, and more) Link to comment Share on other sites More sharing options...
Blackstar Posted December 9, 2006 Author Share Posted December 9, 2006 This is how I would have set it up, though yours seems to be fine. Just set it to search through in a loop. Dim $URL, $PID Dim $linePattern $linePattern = '(?i)(?:pid=)(\d*)' $URL = "http://anywhere.com/view?f=catagory&pid=99453&page=1&order=down" $PID = StringRegExp($URL, $linePattern, 3) For $i = 0 To UBound($PID) - 1 Step 1 MsgBox(0,"Result", $PID[$i]) Next I hope that helps. xcal has given same basic answer. Loop is what you were missing. JS I didnt know StringRegExp requires a loop and an array to get that simple number extraction. Surely there is must be another way to StringRegExp without all that? I could use $PID = Number(StringMid($URL, 41, 7)) as one liner...but I thought StringRegExp would be more efficient. Link to comment Share on other sites More sharing options...
JSThePatriot Posted December 9, 2006 Share Posted December 9, 2006 I didnt know StringRegExp requires a loop and an array to get that simple number extraction. Surely there is must be another way to StringRegExp without all that?I could use $PID = Number(StringMid($URL, 41, 7)) as one liner...but I thought StringRegExp would be more efficient.StringRegExp is to search for content that may not be in the same place all the time. It will be more efficient in more complex situations than some where you know the exact location will always be.JS AutoIt Links File-String Hash Plugin Updated! 04-02-2008 Plugins have been discontinued. I just found out. ComputerGetInfo UDF's Updated! 11-23-2006 External Links Vortex Revolutions Engineer / Inventor (Web, Desktop, and Mobile Applications, Hardware Gizmos, Consulting, and more) Link to comment Share on other sites More sharing options...
Blackstar Posted December 9, 2006 Author Share Posted December 9, 2006 After looking at String Regular expression in AutoIT's help file on SRE example #6 few minutes ago and I noticed that I have missed a small code:MsgBox(0, "SRE Example 6 Result", $asResult[0])So I ran a test on this code:Dim $URL, $PID $URL = "http://anywhere.com/view?f=catagory&pid=99453&page=1&order=down" $PID = StringRegExp($URL, "(?:&pid=)([0-9]{1,7})(?:&page=)", 1) MsgBox(0,"Result", $PID[0])and it works. Is that ok for me to use this code? Link to comment Share on other sites More sharing options...
JSThePatriot Posted December 9, 2006 Share Posted December 9, 2006 After looking at String Regular expression in AutoIT's help file on SRE example #6 few minutes ago and I noticed that I have missed a small code: MsgBox(0, "SRE Example 6 Result", $asResult[0]) So I ran a test on this code: Dim $URL, $PID $URL = "http://anywhere.com/view?f=catagory&pid=99453&page=1&order=down" $PID = StringRegExp($URL, "(?:&pid=)([0-9]{1,7})(?:&page=)", 1) MsgBox(0,"Result", $PID[0]) and it works. Is that ok for me to use this code? Yes that is okay. The loop is only needed if there will be more than one match. JS AutoIt Links File-String Hash Plugin Updated! 04-02-2008 Plugins have been discontinued. I just found out. ComputerGetInfo UDF's Updated! 11-23-2006 External Links Vortex Revolutions Engineer / Inventor (Web, Desktop, and Mobile Applications, Hardware Gizmos, Consulting, and more) Link to comment Share on other sites More sharing options...
Blackstar Posted December 9, 2006 Author Share Posted December 9, 2006 One match is all I need for further processing of url address Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now