返回指定的子字符串在一个字符串中的位置。
StringGetPos, OutputVar, InputVar, SearchText [, L#|R#, Offset]
Position := InStr(Haystack, Needle [, CaseSensitive?, StartingPos]) ; 具体请查看 InStr() 函数 。
OutputVar | 存储子字符串在 InputVar 中的位置的变量名。在 StringGetPos 命令中,第一个字符的位置是 0 ,而在 InStr() 函数中第一个字符的位置是 1 。 |
InputVar | 需要被查找的字符串变量名。不要在变量名外加百分号,除非你想使用变量中的 内容 作为变量名。 |
SearchText | 查找的文本。不区分大小写,除非打开了 StringCaseSense 。 |
L#|R# | 当 SearchText 在 InputVar 中出现不止一次的时候,这个参数决定查找的方向。如果省略该参数,将从 InputVar 的左边开始查找,直到找到首个匹配的结果。如果该参数使用 1 或者 R ,将从 InputVar 的右边开始查找,直到找到首个匹配的结果。 要查找非首个匹配,在字母 L 或 R 后跟上相应的数字。例如,要从右边开始查找第四个匹配的结果,指定参数 r4 。注意:如果指定的数字小于或等于 0 ,不会找到匹配的结果。 |
Offset | 偏移。从左边或右边(取决于上面的参数)开始跳过多少个字符再开始查找。如果省略,默认是 0 。例如,下面的例子会从左边第十个字符开始查找:StringGetPos, OutputVar, InputVar, abc, , 9 。这个参数可以是一个 expression/表达式 。 |
当 InputVar 中未包含 SearchText 的时候 ErrorLevel/错误级别 被设置为 1 ,包含的时候设置为 0 。
与 StringMid 以及 InStr() 不同的是,在 StringGetPos 中第一个字符的位置是 0 。
返回的位置总是相对于 InputVar 的第一个字符的,而与是否使用 L#|R# 以及 Offset 参数无关。例如,字符串 “abc”在 123abc789 中的位置永远是 3 ,不管使用了什么参数。
如果在指定的条件下,在 InputVar 中未能找到 SearchText ,OutputVar 会被设置为 -1 ,ErrorLevel 会被设置为 1 。
使用 SplitPath 可以更容易将一个文件路径分解为目录,文件名,扩展名。
内置变量 %A_Space% 和 %A_Tab% 包含了一个单独的空格和一个单独的制表符。当你需要单独搜索空格或制表符,或者在 SearchText 的开头或结尾使用空格或制表符的时候会非常有用。
InStr(), RegExMatch(), IfInString, if var in/contains MatchList, StringCaseSense, StringReplace, SplitPath, StringLeft, StringRight, StringMid, StringTrimLeft, StringTrimRight, StringLen, StringLower, StringUpper, if var is type
示例
Haystack = abcdefghijklmnopqrs Needle = def StringGetPos, pos, Haystack, %Needle% if pos >= 0 MsgBox, The string was found at position %pos%.
; 示例 #2: ; 将一个完整的文件路径分解为各个组成部分。 ; 注意,使用 StringSplit 或者 ; parsing loop 会更加方便,这里只是举个例子。 FileSelectFile, file, , , Pick a filename in a deeply nested folder: if file <> { StringLen, pos_prev, file pos_prev += 1 ; 调整位置到最后一个字符之后。 Loop { ; 从右边开始查找第N个匹配 StringGetPos, pos, file, \, R%A_Index% if ErrorLevel break length := pos_prev - pos - 1 pos_prev := pos pos += 2 ; 为了使用StringMid进行调整。 StringMid, path_component, file, %pos%, %length% MsgBox Path component #%a_index% (from the right) is:`n%path_component% } }