4-1-3.文字列の置換(正規表現)



.NET Framework で提供されるPerl5相当の正規表現を使った置換が行えます。かなり複雑な検索や置換を行うことができます。
下記に正規表現の一般的なメタ文字の意味を説明します。
※説明は『DOBON.NET プログラミング道』より一部引用させていただきました。




※チェックボックスの説明は『4-3.チェックボックス』を参照してください。マッチした文字列に特殊変換を行うことができます。(Ver 5.40以降)
※入力補助の説明は『4-4.ボタンとラベルと入力補助』を参照してください。


検索する文字列で使用できる正規表現


任意の1文字を示す文字

メタ文字
説明
.
改行文字(\n)以外の任意の一文字。ただし [ ] 内では通常のピリオド文字になります。
※チェックボックスの『. の意味を変更し、\n を含めて一致させる』で動作が異なります。
\s
改行文字、タブ文字、半角及び全角のスペースを示します。
\S
\s以外の文字を示します。
\d
半角及び全角の 0 から 9 までの数字を示します。
\D
\d 以外の文字を示します。
\w
単語に使用される文字(アルファベット、数字、アンダーバー(_)、ひらがな、カタカナ、漢字など)を示します。
\W
\w 以外の文字を示します。
\r
キャリッジリターンを示します。
\n
ラインフィールド(改行)を示します。
\t
タブを示します。
\\
メタ文字の意味を持たない通常の文字としての \ を示します。
[ ]
[ ] 内のいずれか1文字を示します。[abc] ならば、aかbかc を示します。
[^ ]
[^ ] 内の文字以外のいずれか1文字を示します。[^abc] ならば、aかbかc以外の文字。
[ - ]
[ - ] 内の連続した文字範囲のいずれか1文字を示します。[0-9] なら数字1文字を示し、[a-zA-Z]ならアルファベット1文字を示します。必ずキャラクターコードの昇順で指定してください。
\u0000
4桁の16進数で表されるUnicode文字を示します。
\x00
2桁の16進数で表されるASCII文字を示します。



文字列内の位置を表す文字(文字列内の位置を示し、他のメタ文字と組み合わせて使用)

メタ文字
説明
^
行またはファイルの先頭を示します。
※チェックボックスの『^ と $ を行単位処理する(OFFはファイル単位)』で動作が異なります。
$
行またはファイルの末尾を示します。ただし、末尾が \n の時は、その前と一致します。
(末尾が \n でも末尾で一致させるには、\z を使います)
※チェックボックスの『^ と $ を行単位処理する(OFFはファイル単位)』で動作が異なります。
\b
単語の境界(\w と \W の間)と一致します。(ただし [ ] 内ではバックスペース文字になります)
\B
\b 以外の境界を示します。



文字の繰り返しを表す文字(文字またはグループの繰り返しを示す)

メタ文字
説明
*
直前の文字が0回以上繰り返す。
+
直前の文字が1回以上繰り返す。
?
直前の文字が0回または1回繰り返す。
{n,m}
直前の文字がn回以上m回以下繰り返す。
{n}
直前の文字がn回繰り返す。
{n,}
直前の文字がn回以上繰り返す。
*?
最短マッチ(先頭から検索)で、0回以上の繰り返しを示します。? は *、+、?、{} の後に付けて、最短マッチ(後方から検索)を示すことができます。

最長マッチ(後方から検索)とは?

 パターン  『Y.*Y』
 元の文字列 『Yamashita-Yのフリーソフトです。By Yamashita-Y
 この例ではピンクの部分1箇所が Y.*Y に該当します。

最小マッチ(前方から検索)とは?

 パターン  『Y.*?Y』
 元の文字列 『Yamashita-Yのフリーソフトです。ByYamashita-Y
 この例ではピンクの部分2箇所が Y.*?Y に該当します。



選択、グループ化などを表す文字

グループ化させる場合に使用します。.NET Frameworkの正規表現にはグループに名前(あるいは番号)を付けることができます。
グループ名前の有無にかかわらず、グループには1から連番で番号が付けられます(番号0はパターン全体)。
メタ文字
説明
|
| で区切られた文字列のいずれか(論理和)を示します。
( )
グループ化する箇所を示します。
(?<name>)
グループに名前(あるいは番号)を示します。(< > の代わりに ' で括ることもできます)
(?: )
キャプチャしないグループを示します。
(?= )
直後にこのパターンが現れることを確認する (ゼロ幅の肯定的先読みアサーション)。
(?! )
直後にこのパターンが現れないことを確認する(ゼロ幅の否定的先読みアサーション)。
(?<= )
直前にこのパターンが現れることを確認する (ゼロ幅の肯定的後読みアサーション)。
(?<! )
直前にこのパターンが現れないことを確認する(ゼロ幅の否定的後読みアサーション)。
(



前方参照(後方参照)を表す文字

グループ化してキャプチャした文字列を後から参照することができます。これが前方参照(後方参照)です。キャプチャした文字列をパターンに埋め込むようなことができます。
メタ文字
説明
\number
番号がnumberのグループと一致した文字列として使用できます。
\k<name>
名前がnameのグループと一致した文字列として使用できます。(< > の代わりに ' で括ることもできます)



置換する文字列で使用できる正規表現


前方参照(後方参照)を表す文字

メタ文字
説明
$number
番号がnumberのグループと一致した文字列として使用できます。$0は該当した部分の全体という意味になります。
${name}
名前がnameのグループと一致した文字列として使用できます。(< > の代わりに ' で括ることもできます)
$&
パターン全体と一致した文字列として使用できます。$& と &0 は同じ意味です。




サンプル1



各行の最初と最後に " を付ける例を示します。
検索する文字列のチェックボックス『. の意味を変更し、\n を含めて一致させる』及び『^ と $ を行単位処理する(OFFはファイル単位)』をONにします。

置換方法 文字列の置換(正規表現)
検索する文字列 ^.*$
置換する文字列 """(最後の"で改行)
テストする文字列 TextSSはYamashita-Yのフリーソフトウェアです。
このソフトは1998年に公開しています。
正式な名前は『複数のHTML&テキストファイル内を一括置換TextSS』です。
テスト結果 "TextSSはYamashita-Yのフリーソフトウェアです。"
"このソフトは1998年に公開しています。"
"正式な名前は『複数のHTML&テキストファイル内を一括置換TextSS』です。"


サンプル2



年月日の順番を入れ替えて月を複写する例を示します。
チェックボックスはすべてOFFです。

置換方法 文字列の置換(正規表現)
検索する文字列 (\d\d\d\d年)(\d\d月)(\d\d日)
置換する文字列 $2$3$1(遅くても$2末)
テストする文字列 TextSS.netは2022年02月22日に公開予定です。
テスト結果 TextSS.netは02月22日2022年(遅くても02月末)に公開予定です。


サンプル3(Ver 5.40以降)



年月日の順番を入れ替えて月を複写する例を示します。
置換する文字列のチェックボックス『07 半角数字を全角数字 12 ⇒ 12』をONにした例を示します。

置換方法 文字列の置換(正規表現)
検索する文字列 (\d\d\d\d年)(\d\d月)(\d\d日)
置換する文字列 $2$3$1(遅くても$2末)
テストする文字列 TextSS.netは2022年02月22日に公開予定です。
テスト結果 TextSS.netは02月22日2022年(遅くても02月末)に公開予定です。


サンプル4



HTMLタグを削除する例を示します。
チェックボックスはすべてOFFです。

置換方法 文字列の置換(正規表現)
検索する文字列 <("[^"]*"|\'[^\']*\'|[^\'">])*>
置換する文字列 (空欄)
テストする文字列 <A href="textss/index.html"><FONT size="4">複数のHTML&テキストファイルを一括置換</FONT><FONT size="5"><B> TextSS.net</B></FONT></A></TD>
<TD width="100" align="center"><FONT size="+1">Ver 5.30</FONT></TD>
テスト結果 複数のHTML&テキストファイルを一括置換 TextSS.net
Ver 5.30