web-dev-qa-db-ja.com

Javaで文字列値を「XXXXX」に置き換える方法は?

特定の文字列値を「XXXX」に置き換えたい。問題は、パターンが非常に動的であり、入力データに固定パターンがないことです。

私の入力データ

https://internetbanking.abc.co.uk/personal/logon/login/?userId=Templ3108&password=Got1&reme

UserIdとpasswordの値を "XXXX"に置き換える必要があります。

私の出力は-

https://internetbanking.abc.co.uk/personal/logon/login/?userId=XXXX&password=XXXX&reme

これは1回限りの例です。 userIdとパスワードのみが存在する他のケースがあります-

userId = 12345678&password = stackoverflow&rememberID =

上記を実現するためにJava=でRegexを使用していますが、まだ成功していません。ガイダンスに感謝します。

[&]([^\\/?&;]{0,})(userId=|password=)=[^&;]+|((?<=\\/)|(?<=\\?)|(?<=;))([^\\/?&;]{0,})(userId=|password=)=[^&]+|(?<=\\?)(userId=|password=)=[^&]+|(userId=|password=)=[^&]+

PS:私は正規表現の専門家ではありません。また、Regex以外にこれを実現するための代替手段があるかどうかをお知らせください。

4
Shash

使用する:

(?<=(\?|&))(userId|password)=(.*?)(?=(&|$))
  • (?<=(\?|&))の前に?または&を付けます(ただし、一致の一部ではありません)。
  • (userId|password)=userIdまたはpasswordに一致し、次に=
  • (.*?)は、次の命令を実行できない限り、任意の文字と一致します
  • (?=(&|$))は、次の文字が&または文字列の末尾のいずれかであることを確認します(ただし、一致の一部ではありません)

次に、$2=xxxxxに置き換え(userIdまたはpasswordを維持するため)、replaceAllを選択します。

2
David Amar

Stringクラスのreplace/replaceAllメソッドを使用するだけで、正規表現だけでなくCharsetもサポートされます。

String url = "https://internetbanking.abc.co.uk/personal/logon/login/?userId=Templ3108&password=Got1&reme";

url = url.replaceAll("(userId=.+?&)", "userId=XXXX&");
url = url.replaceAll("(password=.+?&)", "password=XXXX&");

System.out.println(url);

私も正規表現の専門家ではありませんが、役に立つと思う場合は、このWebサイトを使用して自分の表現をテストしたり、オンラインのチートシートとして使用したりしています。

https://regexr.com

2
Huatxu