jerebenz Posted June 25, 2010 Share Posted June 25, 2010 Hello All,I search about an hour about Regular Expression Help (also read the Help 3 times) but I'm still a noob on this.What I want to do seems very simple, but I don't know how to do it using RegExp :I have a text that always contains the following string (besides other text) : (Ticket XXX) (where XXX is a number (can be 3 or 4 or n digits long)I want to only capture the digits from this text. Link to comment Share on other sites More sharing options...
UEZ Posted June 25, 2010 Share Posted June 25, 2010 Post the text otherwise help is not possible properly! BR, UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
TSGames Posted June 25, 2010 Share Posted June 25, 2010 (edited) Hi there, try this: $string="Ticket 0158 Anything inbetween here?! Ticket 01242" $a=StringRegExp($string,"Ticket (\d{3,})?",4) for $i=0 to UBound($a)-1 Step 1 $match = $a[$i] MsgBox(0,0,$match[1]) ; match[0] catches the whole Ticket, match[1] only the number Next A short explanation for the test-pattern: The first part "Ticket " means, that the String "Ticket " must be found. After this string there must be found digits (\d) and at least 3 ({3,}). The "?" means to find the smallest match (to find the number itself) Btw: UEZ is right, if you ask such questions you should always post an example text for which your code should work. Regards TSGames Edited June 25, 2010 by TSGames Link to comment Share on other sites More sharing options...
PsaltyDS Posted June 25, 2010 Share Posted June 25, 2010 Hello All, I search about an hour about Regular Expression Help (also read the Help 3 times) but I'm still a noob on this. What I want to do seems very simple, but I don't know how to do it using RegExp : I have a text that always contains the following string (besides other text) : (Ticket XXX) (where XXX is a number (can be 3 or 4 or n digits long) I want to only capture the digits from this text. Don't feel lonely. RegExp is like learning to write Chinese until you've been around it for a while. What you want is a non-capturing group to find "Ticket ", and then a group to capture an unknown number of digits: Global $aInput[5] = ["Ticket 123", _ "Start of line:Ticket 45678-End of line", _ "Ticket 90; some more line...", _ "Begin line, middle line, Ticket 1234567", _ "Bgining Ticket 123 Middle Ticket 234 End Ticket 345"] Global $aRET For $n = 0 To UBound($aInput) - 1 $aRET = StringRegExp($aInput[$n], "(?:Ticket )(\d+)", 3) If IsArray($aRET) And @error = 0 Then For $r = 0 To UBound($aRET) - 1 ConsoleWrite($n & ":" & $r & " = " & $aRET[$r] & @LF) Next EndIf Next Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
sahsanu Posted June 25, 2010 Share Posted June 25, 2010 (edited) I have a text that always contains the following string (besides other text) : (Ticket XXX) (where XXX is a number (can be 3 or 4 or n digits long) I want to only capture the digits from this text. Just another solution, it will capture only the 3, 4 or n digits after the word ticket in the whole text: #include <array.au3> ;Function used only to show the result $str="Some text here Ticket 345 and more here" & _ "Some text here Ticket 1234 and more here" $aresult=StringRegExp($str,"(?i)(?<=ticket\s)\d{3,}",3) _ArrayDisplay($aresult) Edit: I didn't read that op needed 3,4 or n, I only read 3 or 4 so I've corrected the pattern to match 3 or n digits ;-) Cheers, sahsanu Edited June 25, 2010 by sahsanu Link to comment Share on other sites More sharing options...
PsaltyDS Posted June 25, 2010 Share Posted June 25, 2010 (edited) Found the obligatory UserFriendly.org ref: Edited June 25, 2010 by PsaltyDS Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
Ascend4nt Posted June 25, 2010 Share Posted June 25, 2010 haha, nice one Psalty. Never thought I'd see RegEx's mentioned in a comic strip. My contributions: Performance Counters in Windows - Measure CPU, Disk, Network etc Performance | Network Interface Info, Statistics, and Traffic | CPU Multi-Processor Usage w/o Performance Counters | Disk and Device Read/Write Statistics | Atom Table Functions | Process, Thread, & DLL Functions UDFs | Process CPU Usage Trackers | PE File Overlay Extraction | A3X Script Extract | File + Process Imports/Exports Information | Windows Desktop Dimmer Shade | Spotlight + Focus GUI - Highlight and Dim for Eyestrain Relief | CrossHairs (FullScreen) | Rubber-Band Boxes using GUI's (_GUIBox) | GUI Fun! | IE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) | Magnifier (Vista+) Functions UDF | _DLLStructDisplay (Debug!) | _EnumChildWindows (controls etc) | _FileFindEx | _ClipGetHTML | _ClipPutHTML + ClipPutHyperlink | _FileGetShortcutEx | _FilePropertiesDialog | I/O Port Functions | File(s) Drag & Drop | _RunWithReducedPrivileges | _ShellExecuteWithReducedPrivileges | _WinAPI_GetSystemInfo | dotNETGetVersions | Drive(s) Power Status | _WinGetDesktopHandle | _StringParseParameters | Screensaver, Sleep, Desktop Lock Disable | Full-Screen Crash Recovery Wrappers/Modifications of others' contributions: _DOSWildcardsToPCRegEx (original code: RobSaunder's) | WinGetAltTabWinList (original: Authenticity) UDF's added support/programming to: _ExplorerWinGetSelectedItems | MIDIEx UDF (original code: eynstyne) (All personal code/wrappers centrally located at Ascend4nt's AutoIT Code) Link to comment Share on other sites More sharing options...
jerebenz Posted June 26, 2010 Author Share Posted June 26, 2010 Well first of all, thanks for your answers (I was leaving office when posted yesterday, and what a surprise to see so much help when I came back !)@UEZ : Yes, you're right, I should have posted an exemple like : "Thank you, we will process your request. (Ticket 678)"I know for a fact that there will be only one instance of "(ticket XXX)" in the text, so reading your answers, I tested the following code that is working :$String="Thank you, we will process your request. (Ticket 674928)" $Result = StringRegExp($String, "(?:Ticket )(\d+)", 3) _ArrayDisplay($Result)There's one more thing though (there's always one with noobs ).That's not I don't like to be assisted like this time or that I don't like to post on the forum, but I would like to know how to write regexp.I once learned php, and I found a very cool tuto that I understood, and I think I can say I would be able to do regexp using php (PCRE).The thing I don't know, is what type of regexp is using Autoit. After looking in the forum, I didn't find a tuto that applied to autoit (with the same syntax used in autoit).I know that autoit is using PCRE (well I think so), but when I found links on the forum to help, the syntax was not the same as used in autoit, and then I was not able to understand how to adapt them with autoit :(http://www.autoitscript.com/autoit3/pcrepattern.html)(http://regexpal.com/) Link to comment Share on other sites More sharing options...
jchd Posted June 26, 2010 Share Posted June 26, 2010 You need to be aware that there are about as many regexp flavors than hydrogen atoms in the whole universe. No, I'm kidding, but there are enough to get lost.AutoIt uses PCRE (Perl Compatible Regular Expresssions) which is a software package ... completely independant of Perl (as you wouldn't have guessed).The complete specifications can be found on the official webpages about the syntax and the patterns. Note that the official webpages may be one or two versions ahead of the version compiled into AutoIt. The PCRE team just released version 8.10 yesterday, while AutoIt uses 8.01 (there was only 8.02 in between).The entry in AutoIt help file is only a brief introduction and more a reminder than a reference. But at least it discusses the basic pattern specifications and features. That's more than enough to get you started. Look in GeoSoft signature: he has written a nice PCRE testbed which uses the exact PCRE version which AutoIt uses (it is written in AutoIt). Also using the search feature of the forum you'll find mentions of useful websites about regexps as well as nice products like RegExp Coach (free) or RegexBuddy (payware) but AFAIK no one is using the exact same PCRE version as AutoIt, albeit most share 95+% of the features.Only advanced features are really different in Perl and PCRE (any non jurassic version). The main features and semantics are not going to change as it would break to much code worldwide. PCRE is (in my view) the most advanced, stable and efficient RE engine available around. You'll find PCRE-type regexp in a large number of products so it's worth learning.What AutoIt doesn't implement right now is the [Perl] callback capability (oh yes there's another thing: AutoIt doesn't offer the DFA engine).. Also every pattern is [re]compiled before use: there's currently no provision for storing compiled patterns for subsequent use. That may change someday. This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
jerebenz Posted June 26, 2010 Author Share Posted June 26, 2010 Hello Jchd, Thanks for your detailed answer. I feel I now have all the keys to learn how to use Regexp in Autoit ! Thanks all Bye 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