replaceAll()
ターゲット文字列の直前と直後の文字をキャプチャする正規表現/置換ペアを作成しようとしています。
単純なケースで機能する私のバージョンは次のとおりです。
String adjacent = "fooaXbcXdbar".replaceAll(".*?(.)X(.).*?(?=(.X)|$)", "$1$2");
これは必要に応じて生成"abcd"
されます(最後に先読みすると、文字列の最後まで消費され、単一の呼び出しが機能しreplaceAll()
ます)。
ただし、ターゲットの後のキャラクターがターゲットの前のキャラクターでもある場合、解決できないように見えるエッジケースがあります。
String adjacent = "fooaXbXdbar".replaceAll(".*?(.)X(.).*?(?=(.X)|$)", "$1$2");
出品致します"ab"
がよろしくお願い致し"abbd"
ます。正規表現は一致の先頭部分を消費したため、次の入力は一致しません。
周りを見回してみましたが、うまくいかないようです。
注:ループやコードなどを含むソリューションには興味がありません。言及されたエッジケースで機能する正規表現と置換文字列を探しているだけです。