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

    • 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
       
    • tezhihi
      By tezhihi
      I have a file (see attached file) with a string all line and this problem on here is I want to separate all $00:, $03:, $10:, $20:, $25:, $30:, $40:, $45:, $110:, $115:, $120: and $T. It's mean that each $ with value start a new line ( a new paragraph). I tried with Regular Expression in notepad++ ex:
      Find ($00:, $01:, $03: and so on) with regex (\$)([0-9]+): and replace is \r\n\1\2 (I think \r\n is @CRLF (not sure :() ) Find $T with regex (\$T)(.*?)(\$T) and replace is \1\2\r\n\3 When I try these regex to replace in notepad on StringRegexReplace the results is incorrect . I have read some example simple about regex. Please advise me how to do that with some example on autoit . The result will be in attached photo. Thanks 
      ahihi.txt