Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
183 views
in Technique[技术] by (71.8m points)

regex - Regular expression syntax error code: 800A1399

I am learning regex and vbscript in order to append text to a .c file on a new line by adding user inputted text on a monthly basis. I receive a regular expression syntax error on line: 68 char: 1 of the following VBScript, and need help sorting it out:

path = "<C:UsersParthDesktopC06S3000.C>"
Set re = New RegExp 

inputstr1 = InputBox("enter short name for recovery month, example: dec2015")
re.Pattern = "^([a-zA-Z]{3,5}d{4})$"
re.IgnoreCase = True
Do While re.Test(inputstr1) <> True
  inputstr1 = InputBox("incorrect entry; enter short name for recovery month, example: dec2015")
Loop

inputstr2 = InputBox("enter full name for recovery month, example: december_2015")
re.Pattern = "^([a-zA-Z_]{3,10}d{4})$"
re.IgnoreCase = True
Do While re.Test(inputstr2) <> True
  inputstr2 = InputBox("incorrect entry; enter full name for recovery month, example: december_2015")
Loop

inputstr3 = InputBox("enter names of all affected groups for recovery month separated by commas and single space, example: a1, a2, a3,...")
re.Pattern = "^(([a-zA-Z_]{1,2}d{1,2}[,]s)*)$"
re.IgnoreCase = True
Do While re.Test(inputstr3) <> True
  inputstr3 = InputBox("incorrect entry, enter names of all affected groups for recovery month separated by commas and space, example: a1, a2, a3,... ")
Loop
grpString1 = split(inputstr3, ",")

inputstr4 = InputBox("enter loss percentage for each group separated by commas and a space; example: 0.00283148378304, 0.39331380134641, ...")
re.Pattern = "^((d.d{14}[,]s)*)$"
Do While re.Test(inputstr4) <> True
  inputstr4 = InputBox("incorrect entry, enter loss percentage for each group separated by commas and a space; example: 0.00283148378304, 0.39331380134641, ... ")
Loop  
grpString2 = split(inputstr4, ",")

If UBound(grpString1) = UBound(grpString2) Then
Else
  'use more efficient code by implementing class variables with a function, for example, in future versions'
  'source: https://bytes.com/topic/asp-classic/answers/125942-vbscript-function-returning-multiple-values'

  response.write("affected group count does not match loss percentage count; reenter these values to match count")
  inputstr3 = InputBox("enter names of all affected groups for recovery month separated by commas and single space, example: a1, a2, a3,...")
  re.Pattern = "^(([a-zA-Z_]{1,2}d{1,2}[,]s)*)$"
  re.IgnoreCase = True
  Do While re.Test(inputstr3) <> True
    inputstr3 = InputBox("incorrect entry, enter names of all affected groups for recovery month separated by commas and space, example: a1, a2, a3,... ")
  Loop
  grpString1 = Split(inputstr3, ",")

  inputstr4 = InputBox("enter loss percentage for each group separated by commas and a space; example: 0.00283148378304, 0.39331380134641, ...")
  re.Pattern = "^((d.d{14}[,]s)*)$"
  Do While re.Test(inputstr4) <> True
    inputstr4 = InputBox("incorrect entry, enter loss percentage for each group separated by commas and a space; example: 0.00283148378304, 0.39331380134641, ... ")
  Loop  
  grpString2 = Split(inputstr4, ",")
End If

Set objfso = CreateObject("Scripting.FileSystemObject")
If objfso.FileExists(path) Then
  Set objFile = objFSO.OpenTextFile(path).ReadAll
End If

'source: http://www.tutorialspoint.com/vbscript/vbscript_split_function.htm'
ublptm = UBound(grpString1)
For i=0 To ublptm 'where lptm = loss_pct_avg_monthyear[group] = percent;'
  lptmStr = lptmstr + "loss_pct_through_[" & grpString1(i) & "] = " & grpString2(i) & ";" & vbCrLf  
Next

re.Pattern = "(?<=loss_pct_through_([a-zA-Z]{3,5}d{4})[([a-zA-Z_]{1,2}d{1,2})]s=sd.d{14}[;]
)
(?=}
)"

'source: http://stackoverflow.com/questions/13588622/using-vbscript-to-find-and-replace-all-multi-line-text-between-curly-braces-of-a'

objFile = re.Replace(objFile, vbCrLf & lptmstr & vbCrLf)

where line 68 is:

objFile = re.Replace(objFile, vbCrLf & lptmstr & vbCrLf)

The regex pattern is supposed to seek .c code and append user inputs on a newline starting with a newline character as follows:

Original file:

 loss_pct_through_nov2015[a4] = 0.13155605112872;
 loss_pct_through_nov2015[a5] = 0.23415898757080;

 loss_pct_through_dec2015[a2] = 0.00283148378304;
 loss_pct_through_dec2015[a3] = 0.39331380134641;
 loss_pct_through_dec2015[a4] = 0.56333929692615;
 loss_pct_through_dec2015[a5] = 0.04051541794440; <-append content from here


}

Updated file:

 loss_pct_through_nov2015[a4] = 0.13155605112872;
 loss_pct_through_nov2015[a5] = 0.23415898757080;

 loss_pct_through_dec2015[a2] = 0.00283148378304;
 loss_pct_through_dec2015[a3] = 0.39331380134641;
 loss_pct_through_dec2015[a4] = 0.56333929692615;
 loss_pct_through_dec2015[a5] = 0.04051541794440;   

 <--new newline character replacing the old one to append content below
 loss_pct_through_jan2016[a2] = 0.04051541794440;
 loss_pct_through_jan2016[a4] = 0.04051541794440;

}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You have a positive lookbehind assertion ((?<=...)) at the beginning of this expression:

re.Pattern = "(?<=loss_pct_through_([a-zA-Z]{3,5}d{4})[([a-zA-Z_]{1,2}d{1,2})]s=sd.d{14}[;]
)
(?=}
)"

The VBScript regular expression engine doesn't support these.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...