0

私は次のような文字列を持っています

somet3x70rnumb3r5.3.1*@:ch4r5*

*スター文字ではないものはすべてパターン引用符でラップし\Q...\E、をに置き換える必要が*あり.*ます。それはこれを与えるはずです:

\Qsomet3x70rnumb3r5.3.1\E.*\Q@:ch4r5\E.*

これは、文字列トラバーサル、分割*(または指定した任意の文字)、および文字列の段階的な構築で実行できますが、可能であれば正規表現とパターンクラスユーティリティを使用したいと思います。

?次のように置き換えられる指定された文字を使用した別の例.

123?4?

与える必要があります

\Q123\E.\Q4\E.

グループを使うことを考えていましたが、各ゾーンをラップするか、別のキャラクターに置き換える必要があるため、すべてのゾーンにグループが必要です。

私の目標は、特定の文字Stringからパターンを作成することですStringが、指定された文字に一致し、残りを無視する領域のみを考慮します(正規表現パターンが含まれている場合でも)。

4

2 に答える 2

1

ワンライナーを構築することを心配しなければ、より簡単になります。ワンライナーはおそらく可能ですが、それは面倒です。代わりに、次のようにすることをお勧めします。

str = str.replaceAll("(?<!^)\\*(?!$)", "\\E.*\\Q")
         .replaceAll("(?<!^)\\?(?!$)", "\\E.\\Q");
str = "\\Q" + str + "\\E";

より簡単に記述でき、はるかに理解しやすくなります。

于 2013-01-14T22:37:17.947 に答える
1

このようなもの?

String s = "abc*efg?123";
s = s.replaceAll("([^\\*\\?]+)", "\\\\Q$1\\\\E");
s = s.replaceAll("\\*", ".*");
s = s.replaceAll("\\?", ".");

結果は\Qabc\E.*\Qefg\E.\Q123\E

于 2013-01-14T22:37:51.207 に答える