StringGetPos

文字列中の特定の文字列の位置を検索する

StringGetPos, OutputVar, InputVar, SearchText [, L#|R# , Offset] 

Parameters

引数名説明
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文字分を飛ばして検索を始める。

ErrorLevel

SearchTextが見つからなかった場合は「1」、見つかった場合は「0」

Remarks

StringMidと違い、文字列の最初は「0」文字目として処理される。

L#|R#やOffsetオプションでの指定にかかわらず、必ずInputVarの先頭からの位置が取得される。

ファイルのパスを分解したい場合、SplitPathを使ったほうが便利。

SearchTextやReplaceTextに半角スペースやTab文字を指定したい場合、組み込み変数%A_Space%%A_Tab%を使用する。

Related

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%
	}
}