Visual Basic サンプル集 |
Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 >
文字列を検索する
2021/10/24
目次
文字列内に「カペー」が含まれるか調べる
Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
If value.Contains("カペー") Then
Debug.WriteLine("カペーが含まれています。")
End If
これでもできます。
Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
If System.Text.RegularExpressions.Regex.IsMatch(value, "カペー") Then
Debug.WriteLine("カペーが含まれています。")
End If
これでもできます。
Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim results = System.Text.RegularExpressions.Regex.Matches(value, "カペー")
If results.Count > 0 Then
Debug.WriteLine("カペーが含まれています。")
End If
文字列内に「カペー」がいくつ含まれるか調べる
Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim results = System.Text.RegularExpressions.Regex.Matches(value, "カペー")
Debug.WriteLine("カペーの数:" & results.Count) ' 2
これでもできます。同じ検索を何度も実行する場合は、変数 re を使いまわせるこちらの方が効率的です。
Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim re As New System.Text.RegularExpressions.Regex("カペー")
Dim results = re.Matches(value)
Debug.WriteLine("カペーの数:" & results.Count) ' 2
文字列内の最初の「カペー」の位置を取得する
Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim index As Integer = value.IndexOf("カペー")
If index >= 0 Then
Debug.WriteLine("最初のカペーの位置:" & index + 1) ' 5
End If
これでもできます。
Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim result = System.Text.RegularExpressions.Regex.Match(value, "カペー")
If result.Success Then
Debug.WriteLine("最初のカペーの位置:" & result.Index + 1) ' 5
End If
文字列内の最後の「カペー」の位置を取得する
Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim index As Integer = value.LastIndexOf("カペー")
If index >= 0 Then
Debug.WriteLine("最後のカペーの位置:" & index + 1) ' 9
End If
これでもできます。
Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim results = System.Text.RegularExpressions.Regex.Matches(value, "カペー")
Dim index As Integer = results(results.Count - 1).Index 'results.Last.Index でもOK
Debug.WriteLine("最後のカペーの位置:" & index + 1) ' 9
メモ:「カペー」が2つ以上含まれない場合エラーになります。該当が2つ以上あるかは results.Count を調べるとわかります。
文字列内の2番目の「カペー」の位置を取得する
Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim index1 As Integer = value.IndexOf("カペー") '1番目のカペーの位置
Dim index2 As Integer = value.IndexOf("カペー", index1 + 1) '2番目のカペーの位置
Debug.WriteLine("2番目のカペーの位置:" & index2 + 1) ' 9
メモ:「カペー」が2つ以上含まれない場合エラーになります。該当があったかは IndexOf の戻り値を調べるとわかります。戻り値が -1 のとき該当がないことを示しています。
これでもできます。
Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim results = System.Text.RegularExpressions.Regex.Matches(value, "カペー")
Dim index2 As Integer = results(1).Index '2番目のカペーの位置
Debug.WriteLine("2番目のカペーの位置:" & index2 + 1) ' 9
メモ:「カペー」が2つ以上含まれない場合エラーになります。該当が2つ以上あるかは results.Count を調べるとわかります。
これでもできます。同じ検索を何度も実行する場合は、変数 re を使いまわせるこちらの方が効率的です。
Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim re As New System.Text.RegularExpressions.Regex("カペー")
Dim results = re.Matches(value)
Dim index2 As Integer = results(1).Index '2番目のカペーの位置
Debug.WriteLine("2番目のカペーの位置:" & index2 + 1) ' 9
メモ:「カペー」が2つ以上含まれない場合エラーになります。該当が2つ以上あるかは results.Count を調べるとわかります。
文字列内のすべての「カペー」の位置を取得する
Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim results = System.Text.RegularExpressions.Regex.Matches(value, "カペー")
For Each result As System.Text.RegularExpressions.Match In results
Debug.WriteLine($"カペーの位置は {result.Index + 1} 文字目です。")
'↓VB2013以前の場合
'Debug.WriteLine("カペーの位置は " & result.Index + 1 & " 文字目です。")
Next
これを実行すると次の通りに出力されます。
カペーの位置は 5 文字目です。
カペーの位置は 9 文字目です。
これでもできます。同じ検索を何度も実行する場合は、変数 re を使いまわせるこちらの方が効率的です。
Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim re As New System.Text.RegularExpressions.Regex("カペー")
Dim results = re.Matches(value)
For Each result As System.Text.RegularExpressions.Match In results
Debug.WriteLine($"カペーの位置は {result.Index + 1} 文字目です。")
'↓VB2013以前の場合
'Debug.WriteLine("カペーの位置は " & result.Index + 1 & " 文字目です。")
Next
これを実行すると次の通りに出力されます。
カペーの位置は 5 文字目です。
カペーの位置は 9 文字目です。
これでもできます。
Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim index As Integer = value.IndexOf("カペー")
Do Until index = -1
Debug.WriteLine($"カペーの位置は {index + 1} 文字目です。")
'↓VB2013以前の場合
'Debug.WriteLine("カペーの位置は " & index + 1 & " 文字目です。")
index = value.IndexOf("カペー", index + 1)
Loop
これを実行すると次の通りに出力されます。
カペーの位置は 5 文字目です。
カペーの位置は 9 文字目です。
「カイン」または「アベル」を検索する
Dim value As String = "創世記によるとアダムの息子カインは嫉妬で弟アベルを殺したが、その具体的な理由は記載されていない。"
Dim results = System.Text.RegularExpressions.Regex.Matches(value, "(カイン|アベル)")
For Each result As System.Text.RegularExpressions.Match In results
Debug.WriteLine($"ヒット:{result.Value} 開始位置:{result.Index}")
'↓VB2013以前の場合
'Debug.WriteLine("ヒット:" & result.Value & " 開始位置:" & result.Index)
Next
これを実行すると次の通りに出力されます。
ヒット:カイン 開始位置:13
ヒット:アベル 開始位置:21
「中臣鎌足」または「藤原鎌足」を検索する
Dim value As String = "中大兄皇子は中臣鎌足と大化の改新を推進。鎌足は藤原鎌足となり藤原氏の祖となった。"
Dim results = System.Text.RegularExpressions.Regex.Matches(value, "(中臣|藤原)鎌足")
For Each result As System.Text.RegularExpressions.Match In results
Debug.WriteLine($"ヒット:{result.Value} 開始位置:{result.Index}")
'↓VB2013以前の場合
'Debug.WriteLine("ヒット:" & result.Value & " 開始位置:" & result.Index)
Next
これを実行すると次の通りに出力されます。
ヒット:中臣鎌足 開始位置:6
ヒット:藤原鎌足 開始位置:23
VB6では InStr などを使用します。Microsoft VBScript Regular Expressionsに参照設定をすれば正規表現も使用可能です。