1

让正则表达式语句接受两个表达式时遇到问题。

这里的“re.pattern”代码有效:

If UserChoice = "" Then WScript.Quit  'Detect Cancel
re.Pattern = "[^(a-z)^(0,4,5,6,7,8,9)]"
re.Global = True    
re.IgnoreCase = True
if re.test( UserChoice ) then 
   Exit Do
 End if
 MsgBox "Please choose either 1, 2 or 3 ", 48, "Invalid Entry"

而下面的“regex.pattern”代码没有。我想用它来格式化收集组的 DSQUERY 命令的结果,但我不想要“,”之后的任何信息,也不想要通常在以下 dsquery 时收集的前导 CN=运行: “dsquery.exe 用户 forestroot -samid “& strInput &”|dsget user -memberof”)

我要格式化的字符串在格式化之前看起来像这样:

CN=APP_GROUP_123,OU=全球组,OU=帐户,DC=corp,DC=contoso,DC=biz

这是我想要的结果:

APP_GROUP_123

Set regEx = New RegExp
**regEx.Pattern = "[,.*]["CN=]"**
Result = regEx.Replace(StrLine, "")

我只能在单独使用时让正则表达式工作,要么

   regEx.Pattern = ",."

或者

regEx.Pattern = "CN="

代码嵌套在这里:

Set InputFile = FSO.OpenTextFile("Temp.txt", 1)
Set InputFile = FSO.OpenTextFile("Temp.txt", 1)
set OutPutFile = FSO.OpenTextFile(StrInput & "-Results.txt", 8, True)

do While InputFile.AtEndOfStream = False
    StrLine = InputFile.ReadLine
      If inStr(strLine, TaskChoice) then    
     Set regEx = New RegExp
     regEx.Pattern = "[A-Za-z]{2}=(.+?),.*"
     Result = regEx.Replace(StrLine, "")
     OutputFile.write(Replace(Result,"""","")) & vbCrLf
      End if
4

2 回答 2

0

您的正则表达式"[,.*]["CN=]"不起作用有两个原因:

  1. 它包含一个未转义的双引号。VBScript 字符串中的双引号必须通过加倍来转义,否则解释器会将您的表达式解释为 string "[,.*][",后跟一个(无效的)变量CN=]名(也没有运算符)和下一个字符串的开头(第 3 个引号) .

  2. 您误解了正则表达式的语法。方括号表示一个字符类。表达式[,.*]将匹配任何单个逗号、句点或星号,而不是逗号后跟任意数量的字符。

    您打算使用的是交替,它由管道符号 ( |) 表示,字符串的开头由插入符号 ( ^) 匹配:

     regEx.Pattern = ",.*|^CN="
    

话虽如此,在您的情况下,更好的方法是使用组并仅用组匹配替换整个字符串:

regEx.Pattern = "^cn=(.*?),.*"
regEx.IgnoreCase = True

Result = regEx.Replace(strLine, "$1")
于 2014-06-20T16:23:15.170 回答
0

这应该让你开始:

str = "CN=APP_GROUP_123,OU=Global Groups,OU=Accounts,DC=corp,DC=contoso,DC=biz"
Set re = New RegExp
re.pattern = "[A-Za-z]{2}=(.+?),.*"

if re.Test(str) then
    set matches = re.Execute(str)
    matched_str = "Matched: " & matches(0).SubMatches(0)
    Wscript.echo matched_str
else
    Wscript.echo "Not a match"
end if

输出:Matched: APP_GROUP_123

您需要的正则表达式是[A-Za-z]{2}=(.+?),.*

如果匹配成功,它将捕获括号中的所有内容。.+?意味着它将非贪婪地匹配任何字符,直到第一个逗号。?in使.+?表达式不贪婪。如果你要省略它,你会捕捉到最后一个逗号的所有内容,DC=biz

于 2014-06-20T15:32:32.243 回答