バージョン

検索/置換 (xamSyntaxEditor)

トピックの概要

目的

このトピックでは、 TextDocument の検索、置換、すべて置換操作について解説します。

注:

Note

置換なしの Find および FindAll 操作はスナップショットで実行されます。詳細については スナップショットの操作 トピックを参照してください。

前提条件

このトピックの本題に入る前に、以下のトピックをお読みください。

トピック 目的

このトピックでは、 xamSyntaxEditor の 機能をわかりやすく解説します。

このトピックでは、 xamSyntaxEditor を短時間で起動、実行するのに役立つ体系的な操作方法を紹介します。

このトピックでは、開発者とユーザー双方の視点から xamSyntaxEditor コントロールのテキスト編集機能をまとめました。

はじめに

検索メソッドと置換メソッドとは

xamSyntaxEditor の TextDocument は、いくつかの強力なメソッドとそのオーバーロードにより、テキストの検索機能と置換機能をサポートしています。大文字と小文字の別、完全一致、検索方向、場合によっては正規表現などの検索基準を指定すると検索結果の絞り込みに便利です。TextSearchCriteria クラスでは、これらのパラメーターをすべてカプセル化し、検索メソッドや置換メソッドに引き数で渡します。

以下に掲げたメソッドはいずれも、使用する検索基準を取得するための TextSearchResultInfo オブジェクトと、実行した置換ごとに TextSearchResult オブジェクトのリストを返します。

場合によっては、検索開始オフセット (文書の先頭からのオフセット) を指定する必要がありますが、これは、 CurrentSnapshotOffsetFromLocation メソッドで xamSyntaxEditor CaretTextLocation プロパティを変換して取得できます。

注:

Note

TextDocument のスナップショットについては、 スナップショットの操作 トピックも参照してください。

検索と置換の要旨

検索と置換の要旨表

以下の表は、FindReplace メソッドをまとめたものです。このメソッドについては、表の後の解説も参照してください。

作業 詳細

指定した開始オフセットから検索を開始して TextSearchCriteria との一致テキストを 1 つ置換します (ファイルの最後に達したあともオプションで、検索を継続できます)。

指定したテキストの範囲を検索して TextSearchCriteria と一致するテキストを 1 つ置換します (オプションでテキストの指定範囲の検索の終了後もそのまま検索を継続できます)。

文書全体、あるいはオプションで、文書内の一定範囲の TextSearchCriteria との一致テキストを置換します。

FindReplace (開始位置のみを指定)

概要

TextSearchCriteria 引数で指定した基準に従って、FindReplace メソッドがテキストを検索します。検索は、startOffset 引数で指定した位置から開始し、一致テキストが見つかると、newText 引数で指定したテキストと置換します。文書の最後に達した後も検索を継続する場合は、wrapIfNotFound 引数を true に設定します。

メソッドの使用方法

目的: 呼び出すメソッド: 設定する引数:

指定したテキストや正規表現との一致データを 1 つ検索して置換します。

  • newText

  • criteria

  • startOffset

  • wrapIfNotFound (オプション)

C# の場合:

TextSearchCriteria tsc = new TextSearchCriteria(
    "text-to-find", // text to search for
    false, // whole word only
    false, // is case sensitive
    false // search backwards
);
// obtain current caret location and get the offset from it
TextLocation tl = this.xamSyntaxEditor1.Caret.TextLocation;
int offset = this.xamSyntaxEditor1.Document.CurrentSnapshot.OffsetFromLocation(tl);
// find and replace one occurrence
TextSearchResultInfo tsri = this.xamSyntaxEditor1.Document.FindReplace(
    "text-for-replace", // new text to replace with
    tsc, // search criteria
    offset, // start offset
    false // wrap if not found
);
if (tsri.Results != null && tsri.Results.Count > 0)
{
    TextSearchResult tsr = tsri.Results[0];
    TextLocation tl2 = tsr.SpanReplaced.Value.EndLocation;
    // the end location of the "SpanReplaced" may be
    // used for a start offset for the next search
}

Visual Basic の場合:

' text to search for
' whole word only
' is case sensitive
' search backwards
Dim tsc As New TextSearchCriteria("text-to-find", False, False, False)
' obtain current caret location and get the offset from it
Dim tl As TextLocation = _
    Me.xamSyntaxEditor1.Caret.TextLocation
Dim offset As Integer =  _
    Me.xamSyntaxEditor1.Document.CurrentSnapshot.OffsetFromLocation(tl)
' find and replace one occurrence
' new text to replace with
' search criteria
' start offset
' wrap if not found
Dim tsri As TextSearchResultInfo = _
    Me.xamSyntaxEditor1.Document.FindReplace("text-for-replace", tsc, offset, False)
If tsri.Results IsNot Nothing AndAlso tsri.Results.Count > 0 Then
    Dim tsr As TextSearchResult = tsri.Results(0)
    Dim tl2 As TextLocation = tsr.SpanReplaced.Value.EndLocation
    ' the end location of the "SpanReplaced" may be
    ' used for a start offset for the next search
End If

FindReplace (テキストの範囲を指定)

概要

TextSearchCriteria 引数で指定した基準に従って、FindReplace メソッドがテキストを検索します。検索は、startOffset で指定した位置から開始し、spanToSearch 引数で定義したテキストの範囲の最後に達して、一致データが見つかると、newText 引数で指定したテキストと置換します。

メソッドの使用方法

目的: 呼び出すメソッド: 設定する引数:

指定したテキストや正規表現との一致データを 1 つ検索して置換します。

  • newText

  • criteria

  • spanToSearch

  • startOffset

  • wrapIfNotFound (オプション)

C# の場合:

TextSearchCriteria tsc = new TextSearchCriteria(
    "text-to-find", // text to search for
    false, // whole word only
    false, // is case sensitive
    false // search backwards
);
// obtain current caret location and get the offset from it
TextLocation tl = this.xamSyntaxEditor1.Caret.TextLocation;
int offset = this.xamSyntaxEditor1.Document.CurrentSnapshot.OffsetFromLocation(tl);
// create a test span, which begins at the current
// caret location and extends 200 characters beyond
TextSpan ts = new TextSpan(offset, 200);
// find and replace one occurence
this.xamSyntaxEditor1.Document.FindReplace(
    "text-for-replace", // new text to replace with
    tsc, // search criteria
    ts, // the text span where to search
    offset, // start offset
    false // wrap if not found
);

Visual Basic の場合:

' text to search for
' whole word only
' is case sensitive
' search backwards
Dim tsc As New TextSearchCriteria("text-to-find", False, False, False)
' obtain current caret location and get the offset from it
Dim tl As TextLocation = _
    Me.xamSyntaxEditor1.Caret.TextLocation
Dim offset As Integer =  _
    Me.xamSyntaxEditor1.Document.CurrentSnapshot.OffsetFromLocation(tl)
‘ create a test span, which begins at the current
‘ caret location and extends 200 characters beyond
Dim ts As New TextSpan(offset, 200)
‘ find and replace one occurrence
‘ new text to replace with
‘ search criteria
‘ the text span where to search
‘ start offset
‘ wrap if not found
Me.xamSyntaxEditor1.Document.FindReplace("text-for-replace", tsc, ts, offset, False)

FindReplaceAll

概要

TextSearchCriteria 引数で指定した基準に従って、FindReplaceAll メソッドがテキストを検索します。検索は文書全体か、指定したテキストの範囲で行います。一致テキストが見つかると、replacementText 引数で指定したテキストと置換します。

メソッドの使用方法

目的: 呼び出すメソッド: 設定する引数:

指定したテキストや正規表現の一致データをすべて検索して置換します。

  • criteria

  • replacementText

  • spanToSearch (オプション)

C# の場合:

Example
TextSearchCriteria tsc = new TextSearchCriteria(
    "text-to-find", // text to search for
    false, // whole word only
    false, // is case sensitive
    false // search backwards
);
// find and replace one occurrence
this.xamSyntaxEditor1.Document.FindReplaceAll(
    tsc, // search criteria
    "text-for-replace" // new text to replace with
);

Visual Basic の場合:

' text to search for
' whole word only
' is case sensitive
' search backwards
Dim tsc As New TextSearchCriteria("text-to-find", False, False, False)
' find and replace one occurrence
' search criteria
' new text to replace with
Me.xamSyntaxEditor1.Document.FindReplaceAll(tsc, "text-for-replace")

関連コンテンツ

このトピックについては、以下のトピックも参照してください。

トピック 目的

このトピックでは、 TextDocumentSnapshot クラスと TextDocumentSnapshotScanner クラスの機能を紹介します。