Artisan Posted June 30, 2008 Share Posted June 30, 2008 I'm rather new to AutoIt, but I've picked up the language quickly. Or not.Have a look at the following code:$DATA = 'Global $INVENTORY = "We got stuff"' & @CRLF & 'Global $VARIABLE = ""' $INVENTORY = "Mine!" $VARIABLE = "some value" Dim $Test1 = StringRegExp($DATA, '\$INVENTORY[[:blank:]]*=[[:blank:]]*"(.*)"', 1) Dim $Test2 = StringRegExp($DATA, '\$VARIABLE[[:blank:]]*=[[:blank:]]*"(.*)"', 1) MsgBox(0, "StringRegExp", "'" & $Test1[0] & "'" & @CRLF & "'" & $Test2[0] & "'") $DATA = StringRegExpReplace($DATA, '\$INVENTORY[[:blank:]]*=[[:blank:]]*"(.*)"', $INVENTORY) $DATA = StringRegExpReplace($DATA, '\$VARIABLE[[:blank:]]*=[[:blank:]]*"(.*)"', $VARIABLE) MsgBox(0, "StringRegExpReplace", $DATA)Message boxes:StringRegExp -------------- 'We got stuff' '' StringRegExpReplace ------------------- Global Mine! Global some valueI'm trying to locate and update variables in the $DATA string (which in reality is read from another .au3 file). Using StringRegExp, it's correctly identifying the value of the variables. (That's just a test to ensure I'm not crazy.) When I use the exact same string for StringRegExpReplace, it's replacing the whole search string, rather than just the return group. What's going on? If need be, I can counter this by replacing the whole variable declaration, but it just seems wrong somehow. I'm using AutoIt v3.2.10.0 on Windows 2000, but the latest update shouldn't have anything to do with this issue. Help? Link to comment Share on other sites More sharing options...
Artisan Posted June 30, 2008 Author Share Posted June 30, 2008 (edited) I don't think it's an AutoIt error. I think I have to use '\1' or '\2' etc in my replace function somehow (instead of just $INVENTORY), but I can't make heads or tails of that as yet. I've searched the help files, and I'm looking at other examples, but it's not clicking yet. Edited June 30, 2008 by Artisan Link to comment Share on other sites More sharing options...
weaponx Posted June 30, 2008 Share Posted June 30, 2008 I'm kind of confused about your goal. AutoIt doesn't process variables inside quotes. I can't tell if you are trying to match actual lines of code from a script or???? Link to comment Share on other sites More sharing options...
cartman380 Posted June 30, 2008 Share Posted June 30, 2008 I don't think it's an AutoIt error. I think I have to use '\1' or '\2' etc in my replace function somehow (instead of just $INVENTORY), but I can't make heads or tails of that as yet. I've searched the help files, and I'm looking at other examples, but it's not clicking yet.In order to use \1 and \2 you have to group them with parenthesis like so$DATA = StringRegExpReplace($DATA, '(\$INVENTORY[[:blank:]]*=[[:blank:]]*")(.*)(")', "\1" & $INVENTORY & "\3") $DATA = StringRegExpReplace($DATA, '(\$VARIABLE[[:blank:]]*=[[:blank:]]*")(.*)(")', "\1" & $VARIABLE & "\3") Link to comment Share on other sites More sharing options...
Artisan Posted July 1, 2008 Author Share Posted July 1, 2008 In order to use \1 and \2 you have to group them with parenthesis like so$DATA = StringRegExpReplace($DATA, '(\$INVENTORY[[:blank:]]*=[[:blank:]]*")(.*)(")', "\1" & $INVENTORY & "\3") $DATA = StringRegExpReplace($DATA, '(\$VARIABLE[[:blank:]]*=[[:blank:]]*")(.*)(")', "\1" & $VARIABLE & "\3") Yeah, that's what I was after. I wasn't quite getting how the return groups worked. Now I do. Thanks a bunch! 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