文字列中の特定の文字列の位置を検索する
StringGetPos, OutputVar, InputVar, SearchText [, L#|R# , Offset]
引数名 | 説明 |
---|---|
OutputVar | 検索された位置を格納する変数名。 文字列の最初は「0」として数える。 見つからなかった場合は、「-1」になる。 |
InputVar | 文字を検索する対象の文字列が格納された変数名。 |
SearchText | 検索する文字列。 StringCaseSenseで設定しない限り、大文字小文字の違いは無視される。 |
L#|R# |
SearchTextにマッチする部分が複数ある場合、何番目の出現位置を取得するかを指定できる。 省略時は、一番最初の出現位置を取得する。 「1」や「R」を指定すると、一番最後の出現位置を取得できる。 「L2」のように「L」に続いて数字を指定すると、最初から指定番目の出現位置を取得できる。 「R3」のように「R」に続いて数字を指定すると、最後から指定番目の出現位置を取得できる。 SearhTextの出現数がLやRに続いて指定した数より少なかった場合、見つからなかったみなされ、OutputVarは「-1」になる。 |
Offset |
検索時、最初のOffset文字分だけ無視して検索を始める。 省略時は「0」。 L#|R#で最後から検索する指定になっている場合、最後のOffset文字分を飛ばして検索を始める。 |
SearchTextが見つからなかった場合は「1」、見つかった場合は「0」
StringMidと違い、文字列の最初は「0」文字目として処理される。
L#|R#やOffsetオプションでの指定にかかわらず、必ずInputVarの先頭からの位置が取得される。
ファイルのパスを分解したい場合、SplitPathを使ったほうが便利。
SearchTextやReplaceTextに半角スペースやTab文字を指定したい場合、組み込み変数%A_Space%や%A_Tab%を使用する。
IfInString, StringCaseSense, SplitPath, StringLeft, StringRight, StringMid, StringTrimLeft, StringTrimRight, StringLen, StringLower, StringUpper, StringReplace, if var is type
Examples
Haystack = abcdefghijklmnopqrs Needle = def StringGetPos, pos, Haystack, %Needle% if pos >= 0 MsgBox, The string was found at position %pos%.
; Example #2: ; Divides up the full path name of a file into components. ; Note that it would be much easier to use StringSplit or a ; parsing loop to do this, so the below is just for illustration. FileSelectFile, file, , , Pick a filename in a deeply nested folder: if file <> { StringLen, pos_prev, file pos_prev += 1 ; Adjust to be the position after the last char. Loop { ; Search from the right for the Nth occurrence: StringGetPos, pos, file, \, R%A_Index% if ErrorLevel <> 0 break length := pos_prev - pos - 1 pos_prev := pos pos += 2 ; Adjust for use with StringMid. StringMid, path_component, file, %pos%, %length% MsgBox Path component #%a_index% (from the right) is:`n%path_component% } }