Popular Post pixelsearch Posted February 12, 2023 Popular Post Share Posted February 12, 2023 (edited) Hi everybody Here is the script I use to test RegEx patterns offline, it's handy. Credits go to Lazycat, who scripted it initially many years ago and thanked "w0uter for ideas and parts of code". I added some modifications (listed in next post) and would like to thank @jchd @mLipok @mikell @Nine @mistersquirrle @taurus905 and @ioa747 for their contribution. Below are the match text & patterns corresponding to the pic above. For a start, you can copy and paste them in their respective edit control. After you choose the corresponding RegExp mode from the ComboBox at the bottom of the screen (mode 3 = return array of global matches) then you'll have the same results as displayed in the pic above. Match Text : blabla...blabla... blabla..."https://media.pic1.jpg"blabla..."https://media.pic2.png"... blabla..."https://media.pic3.jpg"blabla..."https://media.pic4.png"... blabla...blabla... Pattern : (?i)"([^"]+?\.(?:jpg|png))" When you end the script, 2 files will be created in the same directory of the script. Assuming your script is named "RegExpQuickTester 2.5p.au3", the 2 files created will be : * "RegExpQuickTester 2.5p.txt" which contains the saved Match Text that will be reused when you run the script. * "RegExpQuickTester 2.5p.ini" which contains the saved options that will be reused when you run the script. A right click while hovering over the Edit control of the Search Pattern will display a helpful context menu, with possibility to paste something from the menu inside the Search Pattern. Personally I nearly don't paste anything from the context menu but as this feature was created by the original scripter... Instead I like to consult this context menu as a RegExp syntax reminder ! Anyway, just experiment it and choose what's best for you. 99% of the time, the Search Pattern Tab will be on top. If you notice another colored Tab (except the Personal Tab which will never be highlited), then it means that there is something written in this other tab : the color is here only to remind you that there IS something in this other tab, in case you had forgotten. Even a space or a blank line would color the Tab. YJ This particular design (due to original scripter) won't allow you to type "" in the Replace Pattern Tab (mikell frowned, concerning this missing feature). Gladly I found that typing a non existing group, for example $99 will have the same effect as "" so it's a workaround that seems to do the job. The "Code" button allows you to generate the corresponding AutoIt code, which will be copied to the Clipboard Don't hesitate to ask if you have questions. Our RegExp gurus (that's not me) just love RegExp questions Edit: I forgot. You can drag a text file (or htm etc...) inside the Match Text edit control (it's a droppable zone) . There shouldn't be a 32Kb file size limit anymore as I added code to override this limit. There are probably a couple of other functionalities I'm not thinking of now, you'll easily find what you need if you look at the code. And if you want to modify something in the code, don't hesitate. Just share here your modifications in case other users find them useful too, thanks. Updates are detailed in next post Download last version 11 nov 2024 : RegExpQuickTester 2.5r.au3 Edited November 11 by pixelsearch Update to version 2.5r ioa747, BigDaddyO, youtuber and 9 others 9 3 Link to comment Share on other sites More sharing options...
pixelsearch Posted February 12, 2023 Author Share Posted February 12, 2023 (edited) Revisions in RegExpQuickTester (sorted by descending date order) ========= 11 nov 2024 : added a function _ViewSubArrays() in the generated code: this is useful if the user checked Mode 4 which "returns an array of arrays containing global matches including the full match." In this case the function _ViewSubArrays() will display the content of all internal sub-arrays, each internal 1D sub-array becoming 1 row in a 2D array. Thanks to taurus905 for the suggestion, not forgetting jchd who indicated that the internal sub-arrays could have have a different number of rows, depending on the pattern. Changed version from "2.5q" to "2.5r" 10 feb 2024 : check length of 'Personal' Tab before exiting the script : refuse to leave if > 64KB (see notes in script, part Case $GUI_EVENT_CLOSE, $btnClose) Related : Edit Control $ebPersonal got an 'unlimited' text size to bypass the 30.000 characters by default. Changed version from "2.5p" to "2.5q" (version 2.5q wasn't uploaded on the Forum) 25 mar 2023 : save & reload 5 Edit Tabs content with UTF-8 (to take care of Unicode characters) Context menu reworked with new items added, also context menu is now prepared in a separate function _PrepareContextMenu() Newlines (@CRLF and/or @LF and/or @CR) correctly parsed & copied in clipboard, e.g. Code button (for pasting directly in Scite) Ready : generated code > 4095 characters split in lines length acceptable by Scite, e.g < 4096 char) Display 'next offset' (e.g. @extended) for RegEx mode 1 & 2 when successful Changed version from "2.5j" to "2.5p" 21 feb 2023 : added a Personal Tab, where we can place stuff we want to keep as long as we wish (backup patterns etc...) Note: the content of this Tab will not be cleared by the button "Clear" (great !) which will clear all the rest. This Tab is a sort of personal backup saved between sessions in the ini file. Its content will never interfere with StringRegExp Results. Changed version from "2.5i" to "2.5j" 20 feb 2023 : added a button to generate AutoIt code in ClipBoard (StringRegExp or StringRegExpReplace). Thanks ioa747 for the suggestion. Ini file contains again binary strings (in case @crlf are found) because IniWrite doesn't accept multi-line values. The GUI could be enlarged or maximized, not shrinked (since version 2.5g) but let's accept to shrink it a bit vertically too Checked exact include files needed (no more, no less) Changed version from "2.5h" to "2.5i" 14 feb 2023 : minor revision, e.g. no need of 2 include files GuiTab.au3 and GuiEdit.au3, because : _GUICtrlTab_GetCurSel() is no more used in code since version 2.5g (included) GUICtrlSendMsg($ebTest, $EM_LIMITTEXT, -1, 0) does the job, instead of _GUICtrlEdit_SetLimitText($ebTest, -1) which used $EM_SETLIMITTEXT msdn : "the EM_SETLIMITTEXT message is identical to the EM_LIMITTEXT message" Changed version from "2.5g" to "2.5h" 12 feb 2023 : added GUI style $WS_SIZEBOX Registered WM_GETMINMAXINFO to prevent shrinking the GUI (it can be enlarged or maximized, not shrinked) Changed the resizing method of the Tab Control to $GUI_DOCKAUTO (thanks Nine & mistersquirrle for resizing help) Deleted the (now) useless code from version 2.5f which allowed to perform an... ...accurate checking of right-click coords inside the edit box of the Search Pattern Tab to display the context menu (when GUI is maximized). Changed version from "2.5f" to "2.5g" 10 jan 2023 : Added $bTab_3IsHighlited to highlight Tab 3 ("ResultSuffix") when "its" edit control $ebResultSuffix contains something. This Tab 3 ("ResultSuffix") may be not as useful as Tab 2 ("ResultPrefix") which was added on 25 dec 2022, but who knows ? Accurate checking of right-click coords inside the edit box of the Search Pattern Tab to display the context menu (when GUI is maximized) Changed version from "2.5e" to "2.5f" 6 jan 2023 : the annoying @CRLF at the end of the Result edit control has been removed (it's safer to see the very exact content, especially when there are spaces at the end of the result, no need of a disturbing superfluous @CRLF) Changed version from "2.5d" to "2.5e" 28 dec 2022 : no more Binary in .ini file (mikell's suggestion) "Replace Pattern" reminder: to replace all matches with an empty string, just indicate a non existing match group, ex. $99 ++++++++++++++++++++++++++ Changed version from "2.5c" to "2.5d" 25 dec 2022 : in main loop, no need to call RegExpExecute() if $nMsg = -11 ($GUI_EVENT_MOUSEMOVE = -11) Added $bTab_1IsHighlited to highlight Tab 1 ("Replace Pattern") when "its" edit control $ebRegExpReplace contains something. Added $bTab_2IsHighlited to highlight Tab 2 ("ResultPrefix") when "its" edit control $ebResultPrefix contains something. Save content of new edit control "Result Prefix" as Binary into ini file (see note dated 29 nov 2018 above) Cosmetic changes (for example added the useful $TCS_FOCUSONBUTTONDOWN style) Changed version from "2.5b" to "2.5c" 2 feb 2021 : Changed GUICtrlSendMsg($ebRegExp, 0x00C2, 0, ...) to GUICtrlSendMsg($ebRegExp, 0x00C2, 1, ...) ; 0x00C2 = $EM_REPLACESEL , 1 (or True) = allow Undo (MSDN) 2 jun 2020 : Added in the script " - Result length: " & StringLen($sResult) 19 jun 2019 : Added "positive lookbehind" and "negative lookbehind" to context menu. Added \R to context menu, i.e any newline sequence (@CRLF, @CR, @LF) 20 feb 2019 : deleted dozens of variables names during context menu creation, see notes below, just before creating the context menu Added "positive lookahead" and "negative lookahead" to context menu. 26 dec 2018 : replaced GUICtrlSendMsg($ebTest, $EM_LIMITTEXT, -1, 0) from 5 nov 2018, with _GUICtrlEdit_SetLimitText($ebTest, -1) 13 dec 2018 : added variable $hDummycontext used for function _TrackPopupMenu() : no need to redefine it at each right click, once is ok delete 3 handles used in Func WM_COMMAND() : control id's do the same job 2 dec 2018 : trying mLipok's Func WM_COMMAND to prevent CPU overheat : don't execute RegExpExecute() constantly, only if changes in GUI (test on $nMsg) or if changes are done "live" in 3 Edit controls (test on $_g_bWasAChange = True in Func WM_COMMAND() 1 dec 2018 : if GUI is maximized, then right click behavior (to display context help menu) is a bit different in Search Pattern Tab As coordinates of Search Pattern Tab has "changed" when GUI is maximized, we will display help context menu in more cases : look at the $WIN_STATE_MAXIMIZED part in script. 30 nov 2018 : changed trigger mouse button for context menu for regexp's help syntax : from "04" (middle button) to "02" right button. Note : Lazycat's Func _IsPressed($nKey) is no more needed because $aInfo[3] = 1 does the same job for testing right click ! So now if you want to copy the regexp part, it wont work with right click. Select it with mouse, then ctrl-c : ok ! 29 nov 2018 : write "match text" edit control content in a separate txt file in plain text (too big now for ini file), not in binary. Binary stays in ini file (for Pattern and Replace) to take care of silly CR in Pattern or Replace edit controls 28 nov 2018 : drag & drop a txt file's content into Edit control, seems to work ! 27 nov 2018 : changed Dummy label control to 1 pixel size ! (used for right click context help menu) 13 nov 2018 : changed Lazycat's 2 Checkbox by 2 Button (wondering why he choosed Checkbox instead of Button) Added $ES_READONLY to Result Editbox (so had to add $WS_HSCROLL too, to stay compatible with Lazycat's special output in this Editbox) Because of $ES_READONLY, had to add $WS_TABSTOP too (more enjoyable when tabbing) 10 nov 2018 : Delete the function _EditReplaceSel() , keeping only 1 line of it in main script ! After that change, insertion (copied from context menu) can be done at 1st position 07 nov 2018 : changed fonts in several places (not very important) moved Gui code lines to allow using Tab correctly between fields 05 nov 2018 : added line GUICtrlSendMsg($ebTest, $EM_LIMITTEXT, -1, 0) it allows to paste a text to check > 30.000 characters (native limit of Edit control) msdn "If cchMax is set to -1, the multiline edit control limit is 0x7FFFFFFE" i.e 2.147.483.646 characters ! https://www.autoitscript.com/forum/topic/187377-guictrlcreateedit/ https://msdn.microsoft.com/en-us/library/ms908364.aspx Edited November 11 by pixelsearch Update to version 2.5r Link to comment Share on other sites More sharing options...
ptrex Posted February 14, 2023 Share Posted February 14, 2023 @pixelsearch Regex is a powerful tool. I've been trying to wrap my head around it for along time, but never succeeded properly 😞 Do you have any good tips to get this to a descent level to understand the syntax properly ... Contributions :Firewall Log Analyzer for XP - Creating COM objects without a need of DLL's - UPnP support in AU3Crystal Reports Viewer - PDFCreator in AutoIT - Duplicate File FinderSQLite3 Database functionality - USB Monitoring - Reading Excel using SQLRun Au3 as a Windows Service - File Monitor - Embedded Flash PlayerDynamic Functions - Control Panel Applets - Digital Signing Code - Excel Grid In AutoIT - Constants for Special Folders in WindowsRead data from Any Windows Edit Control - SOAP and Web Services in AutoIT - Barcode Printing Using PS - AU3 on LightTD WebserverMS LogParser SQL Engine in AutoIT - ImageMagick Image Processing - Converter @ Dec - Hex - Bin -Email Address Encoder - MSI Editor - SNMP - MIB ProtocolFinancial Functions UDF - Set ACL Permissions - Syntax HighLighter for AU3ADOR.RecordSet approach - Real OCR - HTTP Disk - PDF Reader Personal Worldclock - MS Indexing Engine - Printing ControlsGuiListView - Navigation (break the 4000 Limit barrier) - Registration Free COM DLL Distribution - Update - WinRM SMART Analysis - COM Object Browser - Excel PivotTable Object - VLC Media Player - Windows LogOnOff Gui -Extract Data from Outlook to Word & Excel - Analyze Event ID 4226 - DotNet Compiler Wrapper - Powershell_COM - New Link to comment Share on other sites More sharing options...
SOLVE-SMART Posted February 14, 2023 Share Posted February 14, 2023 I realized @ptrex, you ask @pixelsearch for tips, but I want to share my experience on getting more familiar with RegEx: I used interactive tutorials in the past like this one for example (which works pretty well for me). Maybe this also fits your personal learning type?! Best regards Sven Stay innovative! Spoiler 🌍 Au3Forums 🎲 AutoIt (en) Cheat Sheet 📊 AutoIt limits/defaults 💎 Code Katas: [...] (comming soon) 🎭 Collection of GitHub users with AutoIt projects 🐞 False-Positives 🔮 Me on GitHub 💬 Opinion about new forum sub category 📑 UDF wiki list ✂ VSCode-AutoItSnippets 📑 WebDriver FAQs 👨🏫 WebDriver Tutorial (coming soon) Link to comment Share on other sites More sharing options...
ptrex Posted February 14, 2023 Share Posted February 14, 2023 @SOLVE-SMART Thanks for the tip ! Any help is welcome 👍 Contributions :Firewall Log Analyzer for XP - Creating COM objects without a need of DLL's - UPnP support in AU3Crystal Reports Viewer - PDFCreator in AutoIT - Duplicate File FinderSQLite3 Database functionality - USB Monitoring - Reading Excel using SQLRun Au3 as a Windows Service - File Monitor - Embedded Flash PlayerDynamic Functions - Control Panel Applets - Digital Signing Code - Excel Grid In AutoIT - Constants for Special Folders in WindowsRead data from Any Windows Edit Control - SOAP and Web Services in AutoIT - Barcode Printing Using PS - AU3 on LightTD WebserverMS LogParser SQL Engine in AutoIT - ImageMagick Image Processing - Converter @ Dec - Hex - Bin -Email Address Encoder - MSI Editor - SNMP - MIB ProtocolFinancial Functions UDF - Set ACL Permissions - Syntax HighLighter for AU3ADOR.RecordSet approach - Real OCR - HTTP Disk - PDF Reader Personal Worldclock - MS Indexing Engine - Printing ControlsGuiListView - Navigation (break the 4000 Limit barrier) - Registration Free COM DLL Distribution - Update - WinRM SMART Analysis - COM Object Browser - Excel PivotTable Object - VLC Media Player - Windows LogOnOff Gui -Extract Data from Outlook to Word & Excel - Analyze Event ID 4226 - DotNet Compiler Wrapper - Powershell_COM - New Link to comment Share on other sites More sharing options...
pixelsearch Posted February 14, 2023 Author Share Posted February 14, 2023 10 hours ago, ptrex said: Do you have any good tips to get this to a descent level to understand the syntax properly ... Hi @ptrex I got a book named "Regular Expressions - The Complete Tutorial" by Jan Goyvaerts. You can easily find it on the web (it's a pdf file, 921Kb) . I consult it from time to time, but not as often as I should. The script above has been revised today from version 2.5g to 2.5h, it's just a minor revision. Link to comment Share on other sites More sharing options...
ioa747 Posted February 15, 2023 Share Posted February 15, 2023 (edited) @pixelsearch Well done, your tool is very good, especially (and not only) for beginners. With the guide on the right click, it guides you briefly, and explains what the symbols do. Congratulations ! if i could suggest, since I see that there is a position available on the right of the tabs. or a hole between the buttons to give the complete code, for copying in the form (ready for delivery) #include <Debug.au3> Local $sRegex = '"data":"([^"]+)"' Local $sString = '[[{"records":{"data":"random data"}}],[{"filtered":{"data":"unknown variable"}}],[{"duplicate":{"data":"not constant"}}],{"subject":"Test"}]' Local $aArray = StringRegExp($sString, $sRegex, 3) _DebugArrayDisplay($aArray) Edited April 26, 2023 by ioa747 Zedna and pixelsearch 2 I know that I know nothing Link to comment Share on other sites More sharing options...
pixelsearch Posted February 16, 2023 Author Share Posted February 16, 2023 4 hours ago, ioa747 said: if i could suggest [...] to give the complete code, for copying in the form (ready for delivery) Thanks for the idea (and your encouragements) A button to generate the whole code would be nice (copying it to ClipBoard) We'll have to think about what to do if the "Replace Pattern" Tab is filled (and then maybe the "Replace count" field too). In this case, a StringRegExpReplace() function should be generated and not a StringRegExp() and its _ArrayDisplay() function etc... I'll think of it when I got some free time (this week being busy) ioa747 1 Link to comment Share on other sites More sharing options...
kut0 Posted February 16, 2023 Share Posted February 16, 2023 and nơ you can try chatGPT to do it, but thank you so much Link to comment Share on other sites More sharing options...
pixelsearch Posted February 20, 2023 Author Share Posted February 20, 2023 @ioa747 Following your suggestion, I added a couple of functions to generate the AutoIt code, it seems to work fine. 2 cases may appear when you click on the "Code" button : 1) StringRegExp code : 2) StringRegExpReplace code. In this example the 'Replace Pattern' Tab contains $2.$1.$3 (surrounded with 1 space) In both pics above, the GUI is vertically shrinked (on purpose) just to reduce the uploaded pics size on the Forum (the regular vertical size is the one found in the pic in 1st post). This new version is named "RegExpQuickTester 2.5i.au3" and its listing is found in 1st post. Link to comment Share on other sites More sharing options...
ioa747 Posted February 20, 2023 Share Posted February 20, 2023 @pixelsearch 👍 what can i say, once again amazing, i already have it hanging in my toolbox Congratulations ! I know that I know nothing Link to comment Share on other sites More sharing options...
pixelsearch Posted February 20, 2023 Author Share Posted February 20, 2023 (edited) Thanks ! I got something to modify : in Mode 0, StringRegExp won't return an Array but an Int32 Gonna fix it this evening and modify the listing accordingly (without changing version) Edit: fixed Edited February 20, 2023 by pixelsearch Link to comment Share on other sites More sharing options...
pixelsearch Posted February 21, 2023 Author Share Posted February 21, 2023 On 2/15/2023 at 9:32 PM, ioa747 said: I see that there is a position available on the right of the tabs. Well... maybe we can fill it with a Personal Tab. In this Tab, we can place stuff we want to keep as long as we wish (alternative patterns etc...) it's a sort of personal backup saved between sessions in the ini file. This Tab content will never interfere with StringRegExp Results. If you guys think it's interesting, then I'll add it in the code. Have a great day ioa747 1 Link to comment Share on other sites More sharing options...
ioa747 Posted February 21, 2023 Share Posted February 21, 2023 (edited) something like favorite patterns I like it ! 👍 PS I have found three link that I think are worth sharing with all off you https://regex101.com/ Edited June 14 by ioa747 remove dead links I know that I know nothing Link to comment Share on other sites More sharing options...
pixelsearch Posted February 21, 2023 Author Share Posted February 21, 2023 Added the Personal Tab discussed just above. New version 2.5j (listing in 1st post) Link to comment Share on other sites More sharing options...
Sascha Posted February 21, 2023 Share Posted February 21, 2023 I immediately loved it more then my old regexp tester. Good job. Realy usefull. Thanks. Link to comment Share on other sites More sharing options...
pixelsearch Posted February 21, 2023 Author Share Posted February 21, 2023 (edited) 9 hours ago, Sascha said: I immediately loved it I understand this, as I had the very same feeling when discovering this wonderful piece of software back in 2018. Lazycat, w0uter and @steve8tchreally did a great job at the time. Just a minor change I just made, inside the main While...WEnd loop : GUICtrlSetState($ebRegExp, $GUI_FOCUS) commented out, changed to : ; GUICtrlSetState($ebRegExp, $GUI_FOCUS) ; better caret position when line commented out. If someone uses the special context menu to paste anything from the menu, then the caret will be placed just after what has been pasted (when the line is commented out), I like this behavior. On the contrary, when the line is uncommented, then the caret will be placed at the end of the pattern after the paste process has ended (though I saw the caret also placed anywhere in the pattern too, when the line is uncommented) Anyway no big deal, it's just a minor cosmetic change. Uncommented line or commented out, to each his own Edited February 21, 2023 by pixelsearch Link to comment Share on other sites More sharing options...
Lion66 Posted March 15, 2023 Share Posted March 15, 2023 Hi pixelsearch Since I very rarely use regular expressions, I am too lazy to learn this topic. 🙂 But looking at such wonderful programs as this, I always dreamed of a lazy version. This is when I could enter "match text" and "result", and get "pattern". Is it possible? Link to comment Share on other sites More sharing options...
pixelsearch Posted March 15, 2023 Author Share Posted March 15, 2023 2 hours ago, Lion66 said: I could enter "match text" and "result", and get "pattern". A kind of "reverse engineering" I don't know if it's possible, maybe one of our RegEx gurus will SOLVE-SMART 1 Link to comment Share on other sites More sharing options...
pixelsearch Posted March 27, 2023 Author Share Posted March 27, 2023 Updated to version 2.5p (script found in 1st post) . Revisions are : 25 mar 2023 : save & reload 5 Edit Tabs content with UTF-8 (to take care of Unicode characters) Context menu reworked with new items added, also context menu is now prepared in a separate function _PrepareContextMenu() Newlines (@CRLF and/or @LF and/or @CR) correctly parsed & copied in clipboard, e.g. Code button (for pasting directly in Scite) Ready : generated code > 4095 characters split in lines length acceptable by Scite, e.g < 4096 char) Display 'next offset' (e.g. @extended) for RegEx mode 1 & 2 when successful Changed version from "2.5j" to "2.5p" Thanks to @mikell for his advices while I was modifying the context menu Musashi 1 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