markargin1 Posted April 21, 2012 Posted April 21, 2012 Hi I have a string and I want to get what is right of it. the string looks like this: ('1234,'randomletters');" href="javascript:void(0);">[skip]</A> ... etc The problem is the string can have 4 numbers or 3 number sin the beginning. and there are different amounts of random letters. How can i only extract ('1234,'randomletters'); This is what I have so far or $j = 2 To 50 Step 1 $arrayN [$j] = StringTrimLeft ($arrayNames[$j],95) $arrayNTwo [$j] = StringTrimRight ($arrayN [$j],730) MsgBox (1,"channelnames",$arrayNTwo [$j]) Next I
Malkey Posted April 22, 2012 Posted April 22, 2012 I hope this helps. Local $sString = "('1234,'randomletters');"" href=""javascript:void(0);"">[skip]</A> ... etc" Local $sSubStr = StringRegExpReplace($sString, "(?is)^(?:.*)(\([""']?\d{3,4}[""']?,[""'][a-z]+[""']\))(.*$)", "$1") MsgBox(0, "RE", "From:-" & @LF & $sString & @LF & " is extracted:- " & @LF & $sSubStr) #cs The Reg Exp Pattern:- "(?is)^(?:[^(]*)(\([""']?\d{3,4}[""']?,[""'][a-z]+[""']\))(.*$)":- (?is) <- (?i) & (?s) See StringRegExp function in help file. ^ <- Start matching from the beginning of the test string. (?:...) <- Non-capturing group. ( No back-referencing number produced) .* <- Match any character including vertical white characters (newlines) until the preceeding RE pattern matches characters in the test string. (inside non-capturing group). ( <- Open first capture group. From here to matching closing bracket, all that is captured will be designated the first back-reference, $1 or ${1}, or \1. \( <- An escaped open bracket will match an actual open bracket character. [""']? <- This will match either one or none single or double quote. There are two double quote because the whole RE pattern is enclosed with double quotes. The question mark is a repeating character, meaning the previous character may be matched once (number of times) or none (does not have to be present) {0,1}. \d{3,4} <- Will match any digit (0 to 9), three (3) or four (4) number of times. [""']? <- Same as before , <- Matches a coma that must be there is this capturing group is to match. [""'] <- Same as above except without "?". the repeating character. One double or single quote has to be present for the group to match. [a-z]+ <- Will match any letter (a to z), and because of the previous "(?i)" will also match letters (A to Z), once or many number of times ("+" repeating character like {1,} ). [""'] <- Same as before. \) <- An escaped closing bracket will match an actual close bracket character. ) <- Closing the first capture group. End of capturing of characters that can be recalled as a group with "$1" ( the first back-reference). (.*$) <- This is a second capture group that will match any remaining characters, if any exists, {0,) times, to the end of the string. Because of the previous "(?s)", vertical white characters (newlines) will also be matched, if they exist. The Reg Exp Replacement parameter:- "$1" <- This contains all matches that occurred within the first capture group. Note - The second capture group "$2" is not replaced with anything. #ce
Spiff59 Posted April 22, 2012 Posted April 22, 2012 StringInStr() also gets you what you want... Local $sString = "('1234,'randomletters');"" href=""javascript:void(0);"">[skip]</A> ... etc" $iPos = StringInStr($sString, ';" href') $sSubStr = StringLeft($sString, $iPos) MsgBox(0, "", $sSubStr)
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