TheAutomator

regular expression is not found in dictionary?

5 posts in this topic

#1 ·  Posted (edited)

Can someone please say me what i'm missing here?

this little problem is driving me crazy!

i feel so stupid that i have to ask this but why does this script thinks that "=" doesn't exist inside the dictionary?

$regex = ObjCreate("VBScript.RegExp")
$regex.Pattern = "="
$regex.Global = True
$regex.IgnoreCase = True


$test = ObjCreate("scripting.dictionary")
$test.add("=", 2)


$sentence = "="
Local $find = $regex.execute($sentence)


for $part in $find
msgbox(0,1,$part.Value)
MsgBox(0,2,$part.Value = "=")
MsgBox(0,3,$test.exists("="))
msgbox(0,4,$test.exists($part)) ;this should be true!
next

 

Thanks for any help :)

TheAutomator.

Edited by TheAutomator

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

$part is not the thing that equals "=", $part.Value is. 

MsgBox(0, 4, $test.exists($part.Value)) ;this should be true!
Edited by SadBunny
1 person likes this

Roses are FF0000, violets are 0000FF... All my base are belong to you.

Share this post


Link to post
Share on other sites

 

$part is not the thing that equals "=", $part.Value is. 

MsgBox(0, 4, $test.exists($part.Value)) ;this should be true!

 

Ow, i see  :doh:

i thought "$part" only would work to.

i'm so confused right now because i was testing it in vbscript in the meantime and have a look at this:

Set regex = New RegExp
regex.Pattern = "="
regex.Global = True
regex.IgnoreCase = True

set test = createobject("scripting.dictionary")
test.add "=", 2

sentence = "="
set find = regex.execute(sentence)

for each part in find
    msgbox part
    msgbox test.exists(part)
next

here "part" really equals "="  :think:

why isn't this working then?

TheAutomator.

Share this post


Link to post
Share on other sites

I'm not 100% sure about COM object handling in AutoIt, but I guess the problem is that AutoIt has no way to know what field or method to call from the generic COM object to get the toString value.

VBScript is quite a different language. Object oriented, for one. In this case, the RegExp.execute() method returns an object of the type MatchCollection which then your iterator "part" goes through. I guess there is auto-invocation of the .Value getter/field (don't know how that works in VBscript, never used it) when you access it as a string. I.e. it works not because part equals "=", but because the string auto-invoked string representation equals "=".

Note that this is mostly guesswork, mostly based on the example this link: http://www.regular-expressions.info/vb.html

1 person likes this

Roses are FF0000, violets are 0000FF... All my base are belong to you.

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

  • Similar Content

    • rcmaehl
      By rcmaehl
      Hi all,
      I still suck at regex as always and I need some help. According to the regex tester I normally use this should be working fine but it doesn't....
      StringRegExp($sString, "\A[1-9]+[0-9]*(\-[1-9]+[0-9]*)?,*\Z") I basically want to match:
      all numbers EXCEPT 0, but including 10, 20, etc with each number separated by a comma and allowing a "-" separated range as a value For example:
      1-5,7,10-12 I've spent a couple hours modifying it but I'm not sure where I've gone wrong. Any help would be appreciated!
    • ISI360
      By ISI360
      Hi!

      I need a little bit help from some RegEx experts please:
      I would make my ISN AutoIt Studio faster when generating the scripttree. And what would be better to do this via regex?
      Problem is i am not really good at this regex stuff. So maybe someone could help me here.
       
      The challange is to get all Global Variables from a script via RegEx in a Array.
      Here is a example script with some tests:
      Global $Var1 = 1234 Local $Local_Var = 1234 $Ignore_me_too = 1234 Global $Var2 = 1234, $var3 = 1242 Global $ahIcons[30], $ahLabels[30] Global Const $Var4 = iniread($inivar1,"jj","jj","") , $var5= iniread($inivar2,"jj","jj","") Global $Var_String = "was" Global $Array_Test[16] = [1,15,16,0,31,15,25,15,25,30,8,30,8,15,1,15] Global Enum $MARGIN_SCRIPT_NUMBER = 0, $MARGIN_SCRIPT_ICON, $MARGIN_SCRIPT_FOLD Global Const $Delim = '\', $Delim1 = '|' Global $hard1 = "a", _ $hard2 = "b", _ $hard3 = "c"  
      The returning array should look like this:
      $Var1 $Var2 $var3 $Var4 $var5 $Var_String $Array_Test $MARGIN_SCRIPT_NUMBER $MARGIN_SCRIPT_ICON $MARGIN_SCRIPT_FOLD $Delim $Delim1 $hard1 $hard2 $hard3  
      I already made some success with a expression i found in the SciTE Jump Tool:  (\$\w+)(?:[\h\[.=+*/^,)\-])?
      This nearly returns the perfect results. But it does not check if it´s a global variable (with the const and enum options) and also returns variables in commands (for example $inivar1)
      I also found this regex: (?im:^(?=Global|Const|Enum|Static)(?:Global)?\h*(?:Const|Enum|Static)?(?:(?<=Enum)\h+Step\h+[+*-]\d+)?\h*)([^\r\n .\=]+)
      This returns also usefull results...but trying to understand this explodes my head

      Maybe someone can help me here?
      Thanks in advance!
    • TheAutomator
      By TheAutomator
      Can anyone tell me why this isn't working?..
      #include <array.au3> $regexp = StringRegExp("test 'a b c'", "'([^']|'')*'|\S+", 3) _ArrayDisplay($regexp) trying to split this "test 'a b c'  'some other '' test'' ...'" into:
      0: test
      1: 'a b c'
      2: ...
      but it gives me:
      0: test
      1: c
    • anthonyjr2
      By anthonyjr2
      Hi guys,
      I am pretty bad with regex, and am having some trouble trying to come up with an expression for a certain type of string. Basically I want to be able to tell if a string is of the format:
      AA#####A
      Where the A's are any letter from A-Z and the #'s are any digit from 0-9.
      I've been playing around with a regex tester online for a while but I can't really seem to grasp the concept very well. Could anyone give me any tips?
      This isn't exactly an AutoIt specific question which is why I didn't post it in General Help & Support.
    • willichan
      By willichan
      SQLite database of English words gleaned from free and open source dictionaries
      Current version contains my full dictionary, including all file types. 
      Includes:
      word word type soundex (using my Phonetic Algorythms UDF) word length definition indexed on the word field