トップページに戻る    次の正規表現パズルへ    前の正規表現パズルへ

6-3 出現回数が2回目以降なら削除その2

正規表現パズル

連続して置換を使って、
行ごとに
縦棒で区切られた文字列の出現回数が、
2回目以降の文字列を削除する。

連続置換前


連続置換後


対象データ

1234|5678|1234|679|1235|1234|679|5678|1234|8888|888|88|888|
111|111|
222|22|2|22|222|2222|22|333|3|33|


正規表現

(^|\|)([^|]+\|)(.*\|)?\2
を
\1\2\3
に置換を繰り返す

別解

(?:^|(?<=\|))([^|]+\|)(.*\|)?\1
を
\1\2
に置換を繰り返す


解説

Oracleの正規表現での文字の置換のアレンジ問題です。
Is it possible to do this using a Regular expression(英語)

キャプチャしながら、マッチを進めて、
後方参照を使ってます。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
行頭との論理和であっても、可変の戻り読みは使えないようです。

EmEditor Professional Version 6.00.2で
対象データが
2X2X
XX2XX

で
正規表現を
(?<=^|X)2
で検索すると、行頭の2しかヒットしません。