Javaで正規表現を逆にする方法は?たとえば、'ab。+de'=>'ed。+ba'です。
3 に答える
実際には、針よりも干し草の山を逆にする方がはるかに簡単です。また、Matcher
のCharSequence
代わりにをString
使用するため、をラップするだけで簡単なオーバーヘッドでこれを行うことができます(O(1)のJavaで文字列を逆にするString
ための回答を参照してください)。
Matcher
この知識があれば、パターンを逆転させているように見える代替バージョンを作成できますが、実際には入力を逆転させているだけです。
おお。
正規表現用のパーサーを作成し、すべてのトークン/パーツを逆にする必要があります。
この場合
ab。+deは
a、b、。+、d、e
逆にこれは
e、d、。+、b、a
今グループを想像してください
((ab)(。+ de))
逆は
((ed。+)(ba))
Tiago Peczenyjは正しく、バックリファレンス、キャプチャグループ、および名前付きグループの両方を処理する必要があります。名前付きグループは、名前付きグループを名前で逆参照する必要があるというJava RegExの制限がないため、他のキャプチャグループと同様に番号で逆参照できます。
誰かがJavaソリューションに興味があるなら、私はまさにそれを行うためのライブラリを実装しました。https://github.com/vsch/reverse-regex。
すべての有効なJava正規表現構造を処理し、パターン、マッチャー、および逆検索の入力をラップして、必要なすべてのマッピングと反転を処理するユーティリティクラスを提供します。