- 版本 v1.1.15.01
- 指南和概述
- 常见问题(FAQ)
- 按字母排序的命令和函数索引
- AutoHotkey 脚本展示
- 变更和新功能
- 基本用法和语法
- 迁移到 AutoHotkey 1.1(AutoHotkey_L)
- 环境管理
- 本机代码互操作
- 文件、目录和磁盘管理
- Drive
- DriveGet
- DriveSpaceFree
- FileAppend
- FileCopy
- FileCopyDir
- FileCreateDir
- FileCreateShortcut
- FileDelete
- FileEncoding [AHK_L 42+]
- FileGetAttrib
- FileGetShortcut
- FileGetSize
- FileGetTime
- FileGetVersion
- FileInstall
- FileMove
- FileMoveDir
- FileOpen [AHK_L 42+]
- FileReadLine
- FileRead
- FileRecycle
- FileRecycleEmpty
- FileRemoveDir
- FileSelectFile
- FileSelectFolder
- FileSetAttrib
- FileSetTime
- IfExist / IfNotExist
- IniDelete
- IniRead
- IniWrite
- Loop(文件和文件夹)
- Loop(读取文件内容)
- SetWorkingDir
- SplitPath
- 流程控制
- 内置函数
- GUI、MsgBox、InputBox 及其他对话框
- 鼠标和键盘
- 鼠标和键盘
- #InstallKeybdHook
- #InstallMouseHook
- #KeyHistory
- BlockInput
- Click [v1.0.43+]
- ControlClick
- ControlSend / ControlSendRaw
- CoordMode
- GetKeyState
- KeyHistory
- KeyWait
- Input
- MouseClick
- MouseClickDrag
- MouseGetPos
- MouseMove
- Send / SendRaw / SendInput / SendPlay / SendEvent: 发送按键和点击
- SendLevel [v1.1.06+]
- SendMode [v1.0.43+]
- SetDefaultMouseSpeed
- SetKeyDelay
- SetMouseDelay
- SetCapsLockState/SetNumLockState/SetScrollLockState
- SetStoreCapslockMode
- 数学相关
- 屏幕管理
- 杂项命令
- 进程管理
- 注册表管理
- 声音命令
- 字符串管理
- 窗口管理
- 控件
- 窗口组
- #WinActivateForce
- DetectHiddenText
- DetectHiddenWindows
- SetTitleMatchMode
- SetWinDelay
- StatusBarGetText
- StatusBarWait
- WinActivate
- WinActivateBottom
- WinClose
- WinGet
- WinGetActiveStats
- WinGetActiveTitle
- WinGetClass
- WinGetPos
- WinGetText
- WinGetTitle
- WinHide
- WinKill
- WinMaximize
- WinMinimize
- WinMinimizeAll / WinMinimizeAllUndo
- WinMove
- WinRestore
- WinSet
- WinSetTitle
- WinShow
- WinWait
- WinWaitActive / WinWaitNotActive
- WinWaitClose
- #指令
StringGetPos
获取指定的子字符串在某个字符串中的位置。
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. 注意: 如果编号小于或等于零, 将找不到匹配.
- Offset
最左边或最右边 (取决于上面的参数) 需要跳过的字符数. 省略时默认为 0. 例如,后面的语句会从左边的第十个字符开始查找:
StringGetPos, OutputVar, InputVar, abc, , 9
。此参数可以为 表达式.
ErrorLevel
在 InputVar 中的指定位置没有找到 SearchText 时 ErrorLevel 被置为 1,否则为 0。
备注
与 StringMid 和 InStr() 不同, StringGetPos 中首个字符的位置为 0.
获取的位置总是相对于 InputVar 的首个字符, 不受 L"abc", 那么获取的位置总为 3, 而不论查找的参数如何.
如果 SearchText 不存在于 InputVar 中的指定出现位置, 那么 OutputVar 将被置为 -1 且 ErrorLevel 被置为 1.
使用 SplitPath 可以更容易地将文件路径分解为目录, 文件名和扩展名.
内置变量 %A_Space% 和 %A_Tab% 分别包含了单个空格和单个 tab 字符. 当您需要搜索单独的空格或 tab 或在 SearchText 的开始或末尾含有空格或 tab 时, 这很有用.
相关
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 或 ; 解析循环 会更容易, 这里只是为了演示. FileSelectFile, file, , , Pick a filename in a deeply nested folder: if file <> { StringLen, pos_prev, file pos_prev += 1 ; 改变位置到最后一个字符的后面. 循环 { ; 从右边开始查找第 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% } }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论