InStr()

在一个字符串中向右或向左搜索指定内容.

FoundPos := InStr(Haystack, Needle , CaseSensitive, StartingPos, Occurrence)

参数

Haystack

被搜索的字符串.

Needle

需要搜索的字符串.

CaseSensitive

如果为空或省略, 默认为 0(false). 否则, 指定 1(true) 使搜索区分大小写, 即大小写必须完全匹配. 不区分的方法取决于 StringCaseSense.

StartingPos

如果省略, 默认从 1(Haystack 字符串中的位置 1) 开始搜索. 否则, 指定 2 从第二个字符开始, 3 从第三个字符开始, 依此类推.

如果 StartingPos 超过了字符串 Haystack 的长度会返回 0. [AHK_L 57+]: 如果 StartingPos 为空, 0 或负数, 会变成从字符串末尾开始的反向搜索(从右到左).

不管 StartingPos 如何变, 返回值总是相对于 Haystack 中的第一个字符. 例如, "abc" 在 "123abc789" 中的位置总是 4.

Occurrence [AHK_L 57+]

如果省略, 默认为 1(在 Haystack 中的首次匹配的位置). 如果为空, 默认为 0. 否则, 指定 2 返回第二次匹配的位置, 3 返回第三次匹配位置, 依此类推.

返回值

该函数返回出现字符串 Needle 在字符串 Haystack 中的位置. 位置 1 表示第一个字符; 因为 0 和 "false" 为同义词, 使它能提供直觉上 "没找到" 的意义.

空字符串("") 可以在任何位置出现; 因此, 如果 Needle 是一个空字符串, 返回值为 1. 由于空白的 Needle 通常只会被误传, 因此在 AutoHotkey v2 中会被视为一个错误.

备注

这个函数整合了 IfInStringStringGetPos 命令, 以及一个简单形式的 RegExMatch().

RegExMatch() 可用于搜索字符串中的模式(正则表达式), 使其比 InStr() 灵活得多. 然而, 在搜索一个简单的子字符串时, InStr() 通常比 RegExMatch() 快.

RegExMatch(), StringGetPos, IfInString, StringCaseSense, If Var [not] in/contains MatchList, If Var [not] between Low and High, If Var is [not] Type

示例

报告子字符串 "abc" 在字符串 "123abc789" 中以 1 开始的位置.

MsgBox % InStr("123abc789", "abc") ; 返回 4

Haystack 中搜索 Needle.

Haystack := "The Quick Brown Fox Jumps Over the Lazy Dog"
Needle := "Fox"
If InStr(Haystack, Needle)
  MsgBox, The string was found.
Else
  MsgBox, The string was not found.

演示不区分大小写和区分大小写搜索的区别.

Haystack := "The Quick Brown Fox Jumps Over the Lazy Dog"
Needle := "the"
MsgBox % InStr(Haystack, Needle, false, 1, 2) ; 不区分大小写的搜索, 返回第二次匹配的位置
MsgBox % InStr(Haystack, Needle, true) ; 区分大小写的搜索, 返回首次匹配的位置, 结果同上