Sign in to follow this  
Followers 0
buymeapc

StringRegExp() Question

10 posts in this topic

#1 ·  Posted (edited)

Hi all,

So, I have a few regex's that are trying to pull out versions from file paths, but the file paths are not quite the same. Is there a way I can get just the version out of the paths? Is there a way to do it with one regex?

Here's my attempt at it. Thank you!

Dim $paths[3] = ["\\10.231.254.23\f$\Installs\_SingleEXE\Interfaces\Billing_v0704A\setup.exe", _
             "\\10.231.254.23\f$\Installs\_SingleEXE\Interfaces\Billing_v0705A.exe", _
             "\\10.231.254.23\f$\Installs\_SingleEXE\Interfaces\Billing_v0706A_(Workstation).exe"]

For $i = 0 To 2
    $aMatches = StringRegExp($paths[$i], "(?<=_v)[a-zA-Z\\.\\r\\n0-9]*(?=_(Workstation).exe)", 3)
    If IsArray($aMatches) Then
        ConsoleWrite($aMatches[0] & @CRLF)
    Else
        $aMatches = StringRegExp($paths[$i], "(?<=_v)[a-zA-Z\\.\\r\\n0-9]*(?=\\setup.exe)", 3)
        If IsArray($aMatches) Then
            ConsoleWrite($aMatches[0] & @CRLF)
        Else
            $aMatches = StringRegExp($paths[$i], "(?<=_v)[a-zA-Z\\.\\r\\n0-9]*(?=.exe)", 3)
            If IsArray($aMatches) Then ConsoleWrite($aMatches[0] & @CRLF)
        EndIf
    EndIf
Next
Edited by buymeapc
1 person likes this

Share this post


Link to post
Share on other sites



Only going by your expected output.

Local $aPaths = [ _
        "\\10.231.254.23\f$\Installs\_SingleEXE\Interfaces\Billing_v0704A\setup.exe", _
        "\\10.231.254.23\f$\Installs\_SingleEXE\Interfaces\Billing_v0705A.exe", _
        "\\10.231.254.23\f$\Installs\_SingleEXE\Interfaces\Billing_v0706A_(Workstation).exe"]
Local $aMatches = 0
For $i = 0 To UBound($aPaths) - 1
    $aMatches = StringRegExp($aPaths[$i], "(?<=_v)(\w+)[\.\\_]", 3)
    If not @error Then ConsoleWrite($aMatches[0] & @CRLF)
Next

_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 04/09/2015

Share this post


Link to post
Share on other sites

Wow, those are way shorter than my regex! They work great! Thank you both for the help!!

Share this post


Link to post
Share on other sites

One more stumbling block, I'm afraid.

It appears that element 3 of the array has a version that does not coincide with the regex. It returns "1" since it's told to gather all between the "_v" and "." or "_". I've tried a few things and I can't quite get the regex to spit out a version if ".", "_", or ".exe" is encountered. How can I tell the regex to do this?

Local $aPaths[5] = [ _
        "\\10.231.254.23\f$\Installs\_SingleEXE\Interfaces\Billing_v0704A\setup.exe", _
        "\\10.231.254.23\f$\Installs\_SingleEXE\Interfaces\Billing_v0705A.exe", _
        "\\10.231.254.23\f$\Installs\_SingleEXE\SingleSolution\_PriorReleases\CYC_v5.00.00_(SingleSolution)\CYC-Preview\2012-08-30\WPS_NC_V1110.exe", _
        "\\10.231.254.23\f$\Installs\_SingleEXE\~Utilities\_PriorReleases\FileTool\FileTool_v1.4.2.8.exe", _
        "\\10.231.254.23\f$\Installs\_SingleEXE\Interfaces\Billing_v0706A_(Workstation).exe"]
Local $aMatches = 0
For $i = 0 To UBound($aPaths) - 1
    ;$aMatches = StringRegExp($aPaths[$i], "(?i)_v([^\W_]+)", 3)
    $aMatches = StringRegExp($aPaths[$i], "(?i)(?<=_v)(\w+)[\.\\_]", 3)
    If not @error Then ConsoleWrite($aMatches[UBound($aMatches) - 1] & @CRLF)
Next

Share this post


Link to post
Share on other sites

#6 ·  Posted (edited)

When you change the playing field, the rules have to change with them. That 4th file name doesn't match the others, so of course it's not going to work with it.

Edited by BrewManNH

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post


Link to post
Share on other sites

#7 ·  Posted (edited)

Might be easier just to...assuming this is a network share.

FileGetVersion

This gets them...but it's a stretch.:

Local $aPaths[5] = [ _
        "\\10.231.254.23\f$\Installs\_SingleEXE\Interfaces\Billing_v0704A\setup.exe", _
        "\\10.231.254.23\f$\Installs\_SingleEXE\Interfaces\Billing_v0705A.exe", _
        "\\10.231.254.23\f$\Installs\_SingleEXE\SingleSolution\_PriorReleases\CYC_v5.00.00_(SingleSolution)\CYC-Preview\2012-08-30\WPS_NC_V1110.exe", _
        "\\10.231.254.23\f$\Installs\_SingleEXE\~Utilities\_PriorReleases\FileTool\FileTool_v1.4.2.8.exe", _
        "\\10.231.254.23\f$\Installs\_SingleEXE\Interfaces\Billing_v0706A_(Workstation).exe"]
Local $aMatches = 0
For $i = 0 To UBound($aPaths) - 1
    ;$aMatches = StringRegExp($aPaths[$i], "(?i)_v([^\W_]+)", 3)
    $aMatches = StringRegExp($aPaths[$i], "(?i)(?<=_v)([\d\.]+\w?)[\.\\_].*exe", 3)
    If not @error Then ConsoleWrite($aMatches[UBound($aMatches) - 1] & @CRLF)
Next

If you want both versions on the 3rd one:

Local $aPaths[5] = [ _
        "\\10.231.254.23\f$\Installs\_SingleEXE\Interfaces\Billing_v0704A\setup.exe", _
        "\\10.231.254.23\f$\Installs\_SingleEXE\Interfaces\Billing_v0705A.exe", _
        "\\10.231.254.23\f$\Installs\_SingleEXE\SingleSolution\_PriorReleases\CYC_v5.00.00_(SingleSolution)\CYC-Preview\2012-08-30\WPS_NC_V1110.exe", _
        "\\10.231.254.23\f$\Installs\_SingleEXE\~Utilities\_PriorReleases\FileTool\FileTool_v1.4.2.8.exe", _
        "\\10.231.254.23\f$\Installs\_SingleEXE\Interfaces\Billing_v0706A_(Workstation).exe"]
Local $aMatches = 0
For $i = 0 To UBound($aPaths) - 1
    ;$aMatches = StringRegExp($aPaths[$i], "(?i)_v([^\W_]+)", 3)
    $aMatches = StringRegExp($aPaths[$i], "(?i)(?<=_[v])([\d\.]+\w?)[\.\\_]", 3)
    For $j = 0 to UBound($aMatches)-1
        ConsoleWrite(@TAB & "Match=[" & $aMatches[$j] & "]" )
    Next
    ConsoleWrite ( @CRLF)
Next

 Match=[0704A]
 Match=[0705A]
 Match=[5.00.00] Match=[1110]
 Match=[1.4.2.8]
 Match=[0706A]

Edited by jdelaney

IEbyXPATH-Grab IE DOM objects by XPATH IEscriptRecord-Makings of an IE script recorder ExcelFromXML-Create Excel docs without excel installed GetAllWindowControls-Output all control data on a given window.

Share this post


Link to post
Share on other sites

$aMatches = StringRegExp($aPaths[$i], "(?i)_v((?:[[:alnum:].](?!exe))+)(?!.+\\)", 3)

If you have others exceptions to add, please mention them all together  :)

Share this post


Link to post
Share on other sites

I was originally using FileGetVersion(), but since these are older installer exe's, they have the version of InstallShield set as the file version, so it would return "10.50", which is why I've been trying to get a regex going. Since these are UNC paths, using FileGetVersion() takes a bit, too since I was originally using it twice - once for "ProductVersion" (which this regex will replace) and a second for "ProductName". Now I only have to use it for the latter.

Your second regex works like a dream! Thank you!!

Share this post


Link to post
Share on other sites

Not fair. I didn't have chance to join in on the second round.

1 person likes this

_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 04/09/2015

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0