String 子串的相对位置

String 子串的相对位置,string,vbscript,String,Vbscript,我必须为要搜索的段落中的文本编写VBScript,并从最后一个位置找出文本的位置 假设,如果句子是: 这是我的第一段,也是我的第一次尝试 我必须找出我的位置,第一个位置是9,第二个位置是32。但不是打印32,而是打印9的下一个位置。当我执行这段代码时,我得到结果9和32 Dim X,i For i=1 to 10 X=Instr(i, "This is my first paragraph and my first try", "my", 1) i=X+1 msgbox i

我必须为要搜索的段落中的文本编写VBScript,并从最后一个位置找出文本的位置

假设,如果句子是:

这是我的第一段,也是我的第一次尝试
我必须找出我的位置,第一个位置是9,第二个位置是32。但不是打印32,而是打印9的下一个位置。当我执行这段代码时,我得到结果9和32

Dim X,i

For i=1 to 10
  X=Instr(i, "This is my first paragraph and my first try", "my", 1)

  i=X+1

  msgbox i
Next

这里的问题是
For
间隔循环!我必须根据要搜索的文本调整
For
循环。可以用一个固定的时间间隔来完成吗?这将打印值9和32,但我需要将后一个值打印为23。

这里有几个选项

  • 使用
    Do While
    循环:

    Const SOME_TEXT = "This is my first paragraph and my first try"
    
    Dim intPos, intLast
    intPos = InStr(1, SOME_TEXT, "my")
    
    Do While intPos > 0
        WScript.Echo intPos - intLast
        intLast = intPos
        intPos = InStr(intPos + 1, SOME_TEXT, "my")
    Loop
    
  • 使用正则表达式并利用
    Match
    对象的
    FirstIndex
    属性:

    Dim re
    Set re = New RegExp
    re.Pattern = "\bmy\b"
    re.Global = True
    
    Dim m, i
    Set m = re.Execute("This is my first paragraph and my first try")
    
    For i = 0 To m.Count - 1
        If i = 0 Then MsgBox m(i).FirstIndex + 1 Else MsgBox m(i).FirstIndex - m(i-1).FirstIndex
    Next
    

  • 为什么不添加一个具有恒定间隔的if条件呢?或者您正在尝试寻找性能答案?这只是一个示例。如果我必须找到文本的所有位置,则需要相应地调整for循环。
    for
    循环不是查找未知数量的子字符串的正确工具。考虑使用不同的循环类型。两次发生之间的距离可以计算为当前位置和上一个位置之间的差值。@AnsgarWiechers您建议什么不同的循环类型以及原因?@DrasticdreamerDrasticity you。@Bond:谢谢您的选择。第一个很简单,对我来说很有用。再次感谢你。