検索および置換

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  ユーザーマニュアル > 編集ビュー > テキストビュー >

検索および置換

このセクション:

 

ドキュメント内のテキストの検索
検索オプション
テキストの置換え
正規表現の使用
正規表現のサンプル

 

ドキュメント内でのテキスト検索

「Ctrl+F」 を押して、(または、メニューコマンド 「編集 | 検索」を選択して) 検索ダイアログを表示します (下のスクリーンショット、右上)。 ドキュメント全体、または、選択されたテキストの範囲に対して、ダイアログに入力されたテキストが検索されます。

 

検索する文字列を入力、またはコンボボックスを使用して文字列の最後10列の1つの文字列を選択します。
検索する文字列を入力、または、選択すると、全ての一致がハイライトされ、一致する箇所がベージュのマーカーでスクロールバー内で表示されます (スクリーンショット参照)。
現在選択されている一致は、他の一致と異なる色でハイライトされ、一致する箇所は濃紺のカーソルマーカーで表示されています。
一致の総数は、検索用語のフィールドの下に、現在選択されている一致のインデックス上の位置と共に表示されています(下のスクリーンショット参照)。 例えば、 2 of 4 は、4つの一致の2番目が現在選択されていることを示しています。
1つの一致から次の一致に移動することができます。前後に移動するには、右下に有る「前へ」(Shift+F3)「次へ」 (F3)ボタンそれぞれを選択します。

TextViewFind

検索および置換 モード間を切り替えるには、左上の下矢印をクリックします。
ダイアログを閉じるには、右上の「閉じる」ボタンをクリックします。

 

以下の点に留意してください:

 

検索ダイアログにはモードが存在しません。 これは、テキストビューを使用し続けている間、開いておくことができることを意味します。
ダイアログボックスを開く前にテキストが選択されている場合、選択されたテキストは、自動的に(検索フィールドとして既知の)検索用語フィールドに挿入されます。
範囲内で検索する場合、以下を行います: (i) 選択範囲をマークします。 (ii) 選択範囲内での検索 オプションをオンにして、選択をロックします。 (iii) 検索用語を入力します。他の選択を検索するには、現在の選択を、選択範囲内での検索オプションをオフにして、ロックを解除してください。新しい選択を決定し、選択範囲内での検索 オプションをオンにします。
検索ダイアログが閉じられた後、現在の検索を F3 を押して繰り返すことができます。 または、Shift+F3を押して後ろ向きに検索することができます。 検索ダイアログが表示されます。

 

検索オプション

検索用語フィールドの下のボタンを使用して、検索の条件を指定することができます (下のスクリーンショット参照)。オプションがオンに切り替えられていると、ボタンの色が青に変更されます (下のスクリーンショット内の最初の (キャスティング) オプションを参照してください)。

TextViewFindDialog

以下のオプションから選択することができます:

 

大文字と小文字を区別する: オンに切り替える場合は大文字と小文字が区別されます (Address は、 address とは異なります)。
単語単位: テキスト内の単語単位が一致するものをのみを表示する。 例えば、単語単位がオンに切り替えられており、入力文字列が fit の場合、 fit のみが検索文字列に一致します。 例えば、 fitness 内の fit は、一致ではありません。
正規表現: オンに切り替えられていると、検索用語は正規表現として読み込まれます。 どのように正規表現が使用されるかに関する説明は、下の 正規表現 を参照してください。
フィルターの結果: 検索が実行される1つまたは1つ以上のドキュメントコンポーネントを選択します。
アンカーの検索: 検索用語が入力されると、ドキュメント内の一致がハイライトされ、一致の内の1つが現在の選択としてマークされます。アンカーの検索は最初の選択がカーソルに位置に相対するかを決定します。アンカーの検索がオンになっていると、最初の現在選択されている一致は、カーソルの位置の次の一致を指します。 アンカーの検索がオフになっている場合、最初の現在選択されている一致は、ドキュメントの始めから数えた一番目の一致です。
選択範囲内での検索: オンに切り替えられると、現在の選択範囲がロックされ、検索が選択範囲内に制限されます。それ以外の場合、ドキュメント全体が検索されます。テキストの新しい範囲を選択する前に、現在選択されている検索範囲を検索範囲内オプションをオフにしてロックを解除してください。

 

テキストの置換え

テキスト文字列を置き換えるには、以下を行います:

 

1.「Ctrl+H」 を押して(または、 メニューコマンド 「編集 | 置換を選択し) 置換えダイアログを開きます (下のスクリーンショット)。 (または、ダイアログの左上の下矢印ボタンをクリックして検索/置換ダイアログの置換モードを切り替えることができます。)

TextViewReplace

2. 検索フィールド内で置き換えられる文字列を入力し、フィールドの置換内に新規の文字列を入力します。置き換えられる一致するテキストの数と、現在選択されているマッチは、フィールドの置換えの下に表示されます。 また、一致の場所は巣クロークバー上でベージュのマーカーで表示されていrます。 また、一致する箇所はスクロールバー内でベージュのマーカーで表示されています。 (詳細に関しては、上の ドキュメント内でのテキストの検索 を参照してください)。例えば、上のスクリーンショットは、 文字列 type に対して5つの一致が存在することを示しており、 3番目の一致が現在選択されています。

3. 「次を置き換える」「全てを置き換える」 ボタンは置換フィールドの右側にあります。 「次を置き換える」 をクリックすると、以下の1つが起こります: (i) カーソルが一致、または、一致内に存在する場合、置換えが実行されます。 (ii) カーソルが一致の外に存在する場合、次の一致に移動します。 「次を置き換える」をクリックして、この一致を置き換え、 「全てを置き換える」 をクリックして全ての一致を置き換えます。

 

以下の点に留意してください:

 

ドキュメント全体ではなく、選択範囲内でテキストを置き換えるには、以下を行います: (i) 選択をマークする。(ii) 選択範囲内で検索 オプションをオンに切り替えて、選択をロックする。 (iii) 検索と置き換えテキスト文字列を入力します。 (iii) 「次を置き換える」 または 「全てを置き換える」 を必要に応じてクリックします。他の選択範囲内のテキストを置き換えるには、現在の選択範囲を選択範囲内で検索オプションをオフに切り替えてロック解除し、新しい選択を指定し、選択範囲内で検索オプションをオンにして新しい選択をロックします。
置換えのアクションを元に戻す場合は、 「Ctrl+Z 」または、 「編集 | 元に戻す」を選択します。

 

正規表現の使用

正規表現 (regex) を使用して、テキスト文字列を検索することができます。これを行うには、正規表現のオプションをオンに切り替えます  (上の 検索オプション を参照してください)。これにより、検索用語フィールド内のテキストが正規表現として評価されます。正規表現の構築へのヘルプは、検索用語フィールドの右にある「正規表現 ビルダー」ボタンをクリックしてください(下のスクリーンショット参照)。ビルダー内のアイテムをクリックして、正規表現メタ文字を対応するを検索用語フィールドに入力します。 下のスクリーンショットは、電子メールアドレスを検索するための簡単な正規表現を表示しています。 メタ文字に関する簡単な説明は、 下の正規表現 メタ文字 セクションを参照してください。

Click to expand/collapse

正規表現メタ文字

正規表現 メタ文字のリストは以下の通りです。

 

.

任意の文字を一致する。 これは単一の文字のプレースホルダーです。

\(

一致をタグした範囲の開始をマークする。

\)

一致をタグした範囲の終了をマークする。

\(abc\)

\(\) メタ文字は、タグされた式の開始と終了をマークします。一致する箇所を、後で参照する(バックレファレンス)目的のためにタグ(「記録」) する場合、役に立つ可能性があります。 9つまでの式をタグ付けすることができます (検索、または、置換フィールド内で後に参照することができます)。

 

例えば、 \(the\) \1 は文字列 the に一致します。この式は、以下のように説明することができます: 前に一致しているタグ付けされた箇所へバックレファレンスが後に続く、スペース文字が後に続く文字列「the」 に一致させる(そしてタグ付けされた箇所として記録する) 。

\n

n1 から 9 までの整数の値を持つことができる 変数 の場合。式は、置き換える際にタグ付けされた1番目から9番目までの箇所を参照することができます。 例えば、検索文字列が Fred\([1-9]\)XXX で、置換文字列が Sam\1YYY の場合、検索文字列内に、明示的に番号1とインデックスされている1つのタグされた式が存在することを意味し、また、置換文字列内では、タグ付けされた式は、 \1 と参照されています。 検索と置換式が Fred2XXX に対して適用されている場合、 Sam2YYY が生成されます。

\<

単語の先頭に一致。

\>

単語の末尾に一致。

\x

このコンテキスト以外では特別な意味を持つ、文字 x が使用できるようになります。 例えば、 \[ は、文字セットの始まりではなく、 [ として解釈されます。

[...]

文字のセットを示します。 例えば、 [abc] は、 a、b または c のいずれかを意味します。範囲も使用することができます: 例えば、 [a-z] をすべての小文字のために使用できます。

[^...]

セット内の文字の補完です。 例えば、 [^A-Za-z] は、アルファベット文字を除く全ての文字を意味します。

^

行頭に一致。(セットの内部で使用される以外の場合。上を参照してください) 。

$

行末に一致。 例: A+$ が1つ以上の行末の A を検索する場合。

*

0 回以上一致。例えば、 Sa*m は、 Sm、Sam、Saam、Saaam に一致するなど。

+

1 回以上一致。 例えば、 Sa+m は、Sam、Saam、Saaam に一致するなど。

 

 

特別文字の表記

以下の式に注意してください。

 

\r

キャリッジリターン (CR)。CR (\r) または LF (\n) を使用して新規のラインを検索または作成します。

\n

改行 (LF)。CR (\r) または LF (\n) を使用して新規のラインを検索または作成します。

\t

タブ文字

\\

正規表現内に表示される文字をエスケープするために使用してください。例: \\\n

 

正規表現のサンプル

このサンプルは、正規表現を使用してテキストを検索し置き換える方法について説明しています。多くの場合、テキストの検索と置換えは複雑ではなく、正規表現を必要としません。しかしながら、通常の検索と置換え操作ではテキストを操作できないインスタンスが存在する場合があります。例えば、数千行からなる XML ファイル内の1つのオペレーション内の特定の要素を、囲まれたコンテンツに影響を与えずに、名前を書き換える必要がある場合が挙げられます。 もう1つの例は、要素の複数の属性の順序を変更する場合です。この場合は、手動で行う際に必要とされる手間を省くため、正規表現の使用が役に立ちます。

 
 

サンプル 1: 要素の名前変更

サンプル XML コードリストには、ブックのリストが含まれています。このサンプルの目的を、の各ブックの <Category> 要素を <Genre> と置き換えることとします。この目的を達成するために正規表現を使用します。

 

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="books.xsd">
  <book id="1">
    <author>Mark Twain</author>
    <title>The Adventures of Tom Sawyer</title>
    <category>Fiction</category>
    <year>1876</year>
  </book>
  <book id="2">
    <author>Franz Kafka</author>
    <title>The Metamorphosis</title>
    <category>Fiction</category>
    <year>1912</year>
  </book>
  <book id="3">
    <author>Herman Melville</author>
    <title>Moby Dick</title>
    <category>Fiction</category>
    <year>1851</year>
  </book>
</books>

 

必要条件を満たすには、以下のステップを踏んでください:

 

1.検索と置換ダイアログボックスを開くには、 Ctrl+H を押します。
2.正規表現の使用 _ic_find_regex をクリックします。
3.検索フィールドに次のテキストを入力します: <category>(.+)</category> 。この正規表現は、すべての category 要素に一致し、ハイライトされます。

inc-RegexExample01

(既知ではない)各要素の内部のテキストに一致するには、タグ付けされた条件式 (.+) が使用されています。タグ付けされた条件式 (.+) は、「1つまたは複数の文字 .+ の発生をマッチし、このマッチを記録します。」を意味します。次のステップで表示されているように、後でタグ付けされた条件式を参照する必要があります。

 

4.置換フィールド内に、 次のテキストを入力します: <genre>\1</genre> 。この正規表現置換えのテキストを定義します。検索フィールドから既にタグ付けされた条件式にバックレファレンスするために \1 が使用されていることに注意してください。 すなわち、このコンテキストでは、 \1  「現在一致する <category> 要素の内部のテキスト」を意味します。
5.全てを置き換える _ic_regex_replaceall クリックして、結果を確認します。すべての category 要素が、このサンプルの目的である genre に名前を変更されました。

 

サンプル 2: 属性の順序を変更する

下のサンプル XML コードリストには製品のリストが含まれています。各製品には以下の2つの属性が存在します: idsize。各 product 要素内の idsize 属性の順序の変更をこのサンプルの目的とします。 (すなわち、 size 属性が id の前に来るように変更します)。この条件を満たすために正規表現を使用することができます。

 

<?xml version="1.0" encoding="UTF-8"?>
<products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="products.xsd">
  <product id="1" size="10"/>
  <product id="2" size="20"/>
  <product id="3" size="30"/>
  <product id="4" size="40"/>
  <product id="5" size="50"/>
  <product id="6" size="60"/>
</products>

 

必要条件を満たすには、以下のステップを踏んでください:

 

1.検索と置換ダイアログボックスを開くには、 Ctrl+H を押します。
2.正規表現の使用 _ic_find_regex をクリックします。
3.検索フィールドに次のテキストを入力します: <product id="(.+)" size="(.+)"/> 。 この正規表現は、 XML ドキュメント内の製品要素に一致します。 (既知ではない) 各属性の値に一致するためには、タグ付けされた条件式 (.+) が2度使用されていることに注意してください。 タグ付けされた条件式 (.+) は、各属性の(.+ である文字の1度、または複数回の発生である)値に一致します。
4.検索フィールドに次のテキストを入力します: <product size="\2" id="\1"/> 。 この正規表現には、一致した製品の要素のテキストの代替テキストが含まれています。 \1\2 の2つの参照が使用されていることに注意してください。 これらは、検証フィールドからタグ付けされた条件式に対応しています。すなわち、 \1 は、 「属性 id の値」を意味し、 \2 は「属性 size の値」を意味します。

inc-RegexExample02

6.全てを置き換える _ic_regex_replaceall をクリックして、結果を確認します。すべての product 要素は属性 size が属性の id 前に置かれるように更新されました。

 


(C) 2019 Altova GmbH