正则表达式Vbscript

时间:2013-01-31 12:16:35

标签: regex asp-classic vbscript

我正在摆弄正则表达式,以缩短我一直在使用的字符串拆分程序。

我的购物车有一个字符串,提交给asp脚本,如下所示:

addnothing|-1, addRST115400112*2xl|0, addnothing|-1, addnothing|-1, addRST115400115*xs|0, addnothing|-1

我希望能够提取代表两个库存商品的两个条目:

addRST115400112*2xl|0
addRST115400115*xs|0

我设法让这些代码工作但我不确定我正在使用的模式:

add[^n](.*)\*(.*)\|[0-9],

这会返回:

addRST115400112*2xl|0, addnothing|-1, addnothing|-1, addRST115400115*xs|0,

但我只希望它返回:

addRST115400112*2xl|0
addRST115400115*xs|0

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

你匹配它贪婪.*尽可能多地吃,所以在你的情况下它最终吃到最后\|[0-9]|0

您应该使用.*?代替.*来匹配懒惰


所以你的正则表达式应该是

add(?!nothing)(.*?)\*(.*?)\|\d

\d[0-9]

类似

(?!nothing)只是一个检查..它不匹配或消耗任何东西..比[^n]更好,因为它更可靠,富有表现力且不吃任何东西

答案 1 :(得分:0)

尝试保持.Pattern简单(这是VBScript!)并且更容易修补它(真正单挑库存物品的方法并不明确):

  Dim sInp  : sInp      = "addnothing|-1, addRST115400112*2xl|0, addnothing|-1, addnothing|-1, addRST115400115*xs|0, addnothing|-1"
  Dim reCut : Set reCut = New RegExp
  reCut.Global  = True
  reCut.Pattern = "addR[^|]+\|\d"
  Dim oMTS : Set oMTS = reCut.Execute(sInp)
  If 2 = oMTS.Count Then
     WScript.Echo "Success:", Join(Array(oMTS(0).Value, oMTS(1).Value))
  Else
     WScript.Echo "Bingo:", reCut.Pattern
  End If

输出:

Success: addRST115400112*2xl|0 addRST115400115*xs|0