(概要)
RegrexTextFilterについての追記です。
(内容)
● Javaの正規表現について
Pattern (Java 2 プラットフォーム SE v1.4.0)に完全な説明があります。
● RegrexTextFilterの設定ファイルについて
replaceタグのbefore属性に与えられる文字列は、
XMLパーサによって読み取られてStringオブジェクトになった後、
Javaの正規表現と解釈されます。これを図にすると次のようになります。
これから2つの点に気を付けなければいけないことがわかります。
+ マッチしたい文字列に「&」、「<」、「"」が含まれている時は、XMLの実体参照を使って、
それぞれ「&」、「<」、「"」と書く。
+ マッチしたい文字列に「\」、「.」、「+」、「?」、「(」、「)」、「{」、「|」、「$」、「^」が含まれる時は
どれも「\」によってエスケープする。
これらの2点にさえ気を付ければ、正規表現による強力な置換機能を利用できます。
※Javaのプログラム中に文字リテラルとして正規表現を書く場合、
「\」にマッチさせるには「\\\\」と書かなければなりません。
文字リテラルからStringオブジェクトを作る時に「\」がエスケープ文字になるからです。
これに対し、XMLパーサによって読み取られた文字列は、文字リテラルではありません。
ですから、「\」にマッチさせるには「\\」で済みます。
● 例題
以下の二重引用符で囲んだ文字列にマッチさせるには、RegrexTextFilterの設定ファイルにどう書けばよいでしょうか。
答えは以下の設定ファイルに含まれています。
この設定ファイルで変換した場合、結果は以下のようになります。
● 付録
test.txtとtest.xmlをダウンロードして、
> java jp.inubuyo.cell.RegrexTextFilter -c test.xml test.txt result.txt
とするとresult.txtが生成されるばすです。
test.txt
test.xml
result.txt
改行コードはシステムに合わせて変更する必要があります。
RegrexTextFilterについての追記です。
(内容)
● Javaの正規表現について
Pattern (Java 2 プラットフォーム SE v1.4.0)に完全な説明があります。
● RegrexTextFilterの設定ファイルについて
replaceタグのbefore属性に与えられる文字列は、
XMLパーサによって読み取られてStringオブジェクトになった後、
Javaの正規表現と解釈されます。これを図にすると次のようになります。
これから2つの点に気を付けなければいけないことがわかります。
+ マッチしたい文字列に「&」、「<」、「"」が含まれている時は、XMLの実体参照を使って、
それぞれ「&」、「<」、「"」と書く。
+ マッチしたい文字列に「\」、「.」、「+」、「?」、「(」、「)」、「{」、「|」、「$」、「^」が含まれる時は
どれも「\」によってエスケープする。
これらの2点にさえ気を付ければ、正規表現による強力な置換機能を利用できます。
※Javaのプログラム中に文字リテラルとして正規表現を書く場合、
「\」にマッチさせるには「\\\\」と書かなければなりません。
文字リテラルからStringオブジェクトを作る時に「\」がエスケープ文字になるからです。
これに対し、XMLパーサによって読み取られた文字列は、文字リテラルではありません。
ですから、「\」にマッチさせるには「\\」で済みます。
● 例題
以下の二重引用符で囲んだ文字列にマッチさせるには、RegrexTextFilterの設定ファイルにどう書けばよいでしょうか。
Can you replace " "? Can you replace "-"? Can you replace ","? Can you replace "}"? Can you replace " "? Can you replace "."? Can you replace "+"? Can you replace "?"? Can you replace "("? Can you replace ")"? Can you replace "{"? Can you replace "$"? Can you replace "^"? Can you replace "|"? Can you replace "\"? Can you replace "\s"? Can you replace "\d"? Can you replace "\n"? Can you replace "\t"? Can you replace "\g"? Can you replace ">"? Can you replace "="? Can you replace "/"? Can you replace "!"? Can you replace ";"? Can you replace "&"? Can you replace "<"? Can you replace """? Can you replace "&"? Can you replace "<"? Can you replace """? If you replace the followings, it failed. You should not replace "1". You should not replace "d".
答えは以下の設定ファイルに含まれています。
<?xml version="1.0" encoding="UTF-8" ?> <!-- This file is test.xml --> <regrex> <!-- Use <start> tag to insert strings at the begining of document inside the regrex tag --> <start> <line value="#This file is generated by RegrexTextFilter with test.xml. " /> </start> <!-- Javaの正規表現で使う記号ですが、エスケープは不要です。--> <replace before="^.*"( )".*$" after="I can replace "$1". " /> <replace before="^.*"(-)".*$" after="I can replace "$1". " /> <replace before="^.*"(,)".*$" after="I can replace "$1". " /> <replace before="^.*"(})".*$" after="I can replace "$1". " /> <replace before="^.*"(\t)".*$" after="I can replace "$1". " /> <!-- Javaの正規表現で使う記号なので、エスケープが必要です。--> <replace before="^.*"(\.)".*$" after="I can replace "$1". " /> <replace before="^.*"(\+)".*$" after="I can replace "$1". " /> <replace before="^.*"(\?)".*$" after="I can replace "$1". " /> <replace before="^.*"(\()".*$" after="I can replace "$1". " /> <replace before="^.*"(\))".*$" after="I can replace "$1". " /> <replace before="^.*"(\{)".*$" after="I can replace "$1". " /> <replace before="^.*"(\$)".*$" after="I can replace "$1". " /> <replace before="^.*"(\^)".*$" after="I can replace "$1". " /> <replace before="^.*"(\|)".*$" after="I can replace "$1". " /> <!-- “\”は常にエスケープが必要です。--> <replace before="^.*"(\\)".*$" after="I can replace "$1". " /> <replace before="^.*"(\\s)".*$" after="I can replace "$1". " /> <replace before="^.*"(\\d)".*$" after="I can replace "$1". " /> <replace before="^.*"(\\n)".*$" after="I can replace "$1". " /> <replace before="^.*"(\\t)".*$" after="I can replace "$1". " /> <replace before="^.*"(\\g)".*$" after="I can replace "$1". " /> <!-- XMLで使う記号ですが、エスケープは不要です。--> <replace before="^.*"(>)".*$" after="I can replace "$1". " /> <replace before="^.*"(=)".*$" after="I can replace "$1". " /> <replace before="^.*"(/)".*$" after="I can replace "$1". " /> <replace before="^.*"(!)".*$" after="I can replace "$1". " /> <replace before="^.*"(;)".*$" after="I can replace "$1". " /> <!-- XMLで使う記号なので、エスケープが必要です。--> <replace before="^.*"(<)".*$" after="I can replace "$1". " /> <replace before="^.*"(")".*$" after="I can replace "$1". " /> <!-- “&”は常にエスケープが必要です。--> <replace before="^.*"(&)".*$" after="I can replace "$1". " /> <replace before="^.*"(&amp;)".*$" after="I can replace "$1". " /> <replace before="^.*"(&lt;)".*$" after="I can replace "$1". " /> <replace before="^.*"(&quot;)".*$" after="I can replace "$1". " /> </regrex>
この設定ファイルで変換した場合、結果は以下のようになります。
#This file is generated by RegrexTextFilter with test.xml. I can replace " ". I can replace "-". I can replace ",". I can replace "}". I can replace " ". I can replace ".". I can replace "+". I can replace "?". I can replace "(". I can replace ")". I can replace "{". I can replace "$". I can replace "^". I can replace "|". I can replace "\". I can replace "\s". I can replace "\d". I can replace "\n". I can replace "\t". I can replace "\g". I can replace ">". I can replace "=". I can replace "/". I can replace "!". I can replace ";". I can replace "&". I can replace "<". I can replace """. I can replace "&". I can replace "<". I can replace """. If you replace the followings, it failed. You should not replace "1". You should not replace "d".
● 付録
test.txtとtest.xmlをダウンロードして、
> java jp.inubuyo.cell.RegrexTextFilter -c test.xml test.txt result.txt
とするとresult.txtが生成されるばすです。
test.txt
test.xml
result.txt
改行コードはシステムに合わせて変更する必要があります。