例: 正規表現を使用してテキストを置き換える

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

ホーム >  ファイルの比較 > テキストの検索と置換 >

例: 正規表現を使用してテキストを置き換える

このサンプルは、正規表現を使用してテキストを検索し置き換える方法について説明しています。多くの場合、テキストの検索と置換えは複雑ではなく、正規表現を必要としません。しかしながら、通常の検索と置換え操作ではテキストを操作できないインスタンスが存在する場合があります。例えば、数千行からなる 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