ヘッダー
Visual Basic サンプル集
VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

文字列を検索する

2021/10/24

→ C# のサンプルに切り替える

 

文字列内に「カペー」が含まれるか調べる

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"

If value.Contains("カペー") Then
    Debug.WriteLine("カペーが含まれています。")
End If 

Debug.WriteLineが表示される場所

 

これでもできます。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"

If System.Text.RegularExpressions.Regex.IsMatch(value, "カペー") Then
    Debug.WriteLine("カペーが含まれています。")
End If

Debug.WriteLineが表示される場所

 

これでもできます。

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim results = System.Text.RegularExpressions.Regex.Matches(value, "カペー")

If results.Count > 0 Then
    Debug.WriteLine("カペーが含まれています。")
End If

Debug.WriteLineが表示される場所

 

 

文字列内に「カペー」がいくつ含まれるか調べる

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim results = System.Text.RegularExpressions.Regex.Matches(value, "カペー")

Debug.WriteLine("カペーの数:" & results.Count) ' 2

Debug.WriteLineが表示される場所

 

これでもできます。同じ検索を何度も実行する場合は、変数 re を使いまわせるこちらの方が効率的です。

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim re As New System.Text.RegularExpressions.Regex("カペー")
Dim results = re.Matches(value)

Debug.WriteLine("カペーの数:" & results.Count) ' 2

Debug.WriteLineが表示される場所

 

 

文字列内の最初の「カペー」の位置を取得する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim index As Integer = value.IndexOf("カペー")

If index >= 0 Then
    Debug.WriteLine("最初のカペーの位置:" & index + 1) ' 5
End If 

Debug.WriteLineが表示される場所

 

これでもできます。

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim result = System.Text.RegularExpressions.Regex.Match(value, "カペー")

If result.Success Then
    Debug.WriteLine("最初のカペーの位置:" & result.Index + 1) ' 5
End If

Debug.WriteLineが表示される場所

 

 

文字列内の最後の「カペー」の位置を取得する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。"
Dim index As Integer = value.LastIndexOf("カペー")

If index >= 0 Then
    Debug.WriteLine("最後のカペーの位置:" & index + 1) ' 9
End If 

Debug.WriteLineが表示される場所

 

これでもできます。

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

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

Debug.WriteLineが表示される場所

メモ:「カペー」が2つ以上含まれない場合エラーになります。該当が2つ以上あるかは results.Count を調べるとわかります。

 

 

文字列内の2番目の「カペー」の位置を取得する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

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

Debug.WriteLineが表示される場所

メモ:「カペー」が2つ以上含まれない場合エラーになります。該当があったかは IndexOf の戻り値を調べるとわかります。戻り値が -1 のとき該当がないことを示しています。

 

これでもできます。

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

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

Debug.WriteLineが表示される場所

メモ:「カペー」が2つ以上含まれない場合エラーになります。該当が2つ以上あるかは results.Count を調べるとわかります。

 

これでもできます。同じ検索を何度も実行する場合は、変数 re を使いまわせるこちらの方が効率的です。

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

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

Debug.WriteLineが表示される場所

メモ:「カペー」が2つ以上含まれない場合エラーになります。該当が2つ以上あるかは results.Count を調べるとわかります。

 

 

文字列内のすべての「カペー」の位置を取得する

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

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

Debug.WriteLineが表示される場所

これを実行すると次の通りに出力されます。

カペーの位置は 5 文字目です。
カペーの位置は 9 文字目です。

 

これでもできます。同じ検索を何度も実行する場合は、変数 re を使いまわせるこちらの方が効率的です。

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

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

Debug.WriteLineが表示される場所

これを実行すると次の通りに出力されます。

カペーの位置は 5 文字目です。
カペーの位置は 9 文字目です。

 

これでもできます。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

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

Debug.WriteLineが表示される場所

これを実行すると次の通りに出力されます。

カペーの位置は 5 文字目です。
カペーの位置は 9 文字目です。

 

 

「カイン」または「アベル」を検索する

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

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

Debug.WriteLineが表示される場所

これを実行すると次の通りに出力されます。

ヒット:カイン 開始位置:13
ヒット:アベル 開始位置:21

 

 

「中臣鎌足」または「藤原鎌足」を検索する

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

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

Debug.WriteLineが表示される場所

これを実行すると次の通りに出力されます。

ヒット:中臣鎌足 開始位置:6
ヒット:藤原鎌足 開始位置:23

 


VB6対応 VB6では InStr などを使用します。Microsoft VBScript Regular Expressionsに参照設定をすれば正規表現も使用可能です。