Moderators Melba23 Posted January 28, 2017 Moderators Share Posted January 28, 2017 Hi all, I am trying to develop a RegEx pattern that allows the following: One or two digits, possibly followed by a single uppercase letter, possibly followed by * but only if there is a preceding letter. I have the following effort: ^\d{1,2}[A-Z]?(?<=[A-Z])\*?$ which seems to cope with the more complex cases, but fails if there are only digits. Both the letter and * are quantified as "0 or 1", so I cannot see why the "digit-only" case fails. My thanks in advance to any guru able to explain why and offer me a working pattern. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
ripdad Posted January 28, 2017 Share Posted January 28, 2017 not a guru - but this might work... (\d{1,2}[A-Z]\*?|\d{1,2}[A-Z]?) "The mediocre teacher tells. The Good teacher explains. The superior teacher demonstrates. The great teacher inspires." -William Arthur Ward Link to comment Share on other sites More sharing options...
Bowmore Posted January 28, 2017 Share Posted January 28, 2017 If I have interpreted your requirements correctly this '^\d{1,2}([A-Z][*]?)?$' works $res = StringRegExp('12','^\d{1,2}([A-Z][*]?)?$') ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $res = ' & $res & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console $res = StringRegExp('1A','^\d{1,2}([A-Z][*]?)?$') ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $res = ' & $res & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console $res = StringRegExp('12A*','^\d{1,2}([A-Z][*]?)?$') ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $res = ' & $res & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console $res = StringRegExp('12AB','^\d{1,2}([A-Z][*]?)?$') ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $res = ' & $res & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console $res = StringRegExp('12AB*','^\d{1,2}([A-Z][*]?)?$') ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $res = ' & $res & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console $res = StringRegExp('1AB*','^\d{1,2}([A-Z][*]?)?$') ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $res = ' & $res & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console $res = StringRegExp('1*','^\d{1,2}([A-Z][*]?)?$') ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $res = ' & $res & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console $res = StringRegExp('12*','^\d{1,2}([A-Z][*]?)?$') ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $res = ' & $res & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console Danyfirex 1 "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to build bigger and better idiots. So far, the universe is winning."- Rick Cook Link to comment Share on other sites More sharing options...
mikell Posted January 28, 2017 Share Posted January 28, 2017 (edited) Melba $str = "12" $res = StringRegExp($str, '^\d{1,2}[A-Z]?(?<=[A-Z])\*?$' ) Msgbox(0,"", $res) $res = StringRegExp($str, '^\d{1,2}[A-Z]?((?<=[A-Z])\*)?$' ) Msgbox(0,"", $res) ; ^\d{1,2}([A-Z]\*?)?$ Edited January 29, 2017 by mikell Danyfirex 1 Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted January 29, 2017 Author Moderators Share Posted January 29, 2017 Thanks to all responders. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
jguinch Posted January 29, 2017 Share Posted January 29, 2017 (edited) Using a conditional pattern : $res = StringRegExp($str, '^\d\d?([A-Z])?(?(1)\*?)$') or just a Or operator : $res = StringRegExp($str, '^\d\d?([A-Z]?|[A-Z]\*?)$') Edited January 29, 2017 by jguinch Skysnake and Danyfirex 2 Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted January 29, 2017 Author Moderators Share Posted January 29, 2017 jguinch, Thanks for that - I have never used conditional matches before, so a very educational example. Damn RegExes still make my brain bleed! M23 Danyfirex 1 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area 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