特定の文字列値を「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以外にこれを実現するための代替手段があるかどうかをお知らせください。
使用する:
(?<=(\?|&))(userId|password)=(.*?)(?=(&|$))
(?<=(\?|&))
の前に?
または&
を付けます(ただし、一致の一部ではありません)。(userId|password)=
はuserId
またはpassword
に一致し、次に=
(.*?)
は、次の命令を実行できない限り、任意の文字と一致します(?=(&|$))
は、次の文字が&
または文字列の末尾のいずれかであることを確認します(ただし、一致の一部ではありません)次に、$2=xxxxx
に置き換え(userId
またはpassword
を維持するため)、replaceAll
を選択します。
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サイトを使用して自分の表現をテストしたり、オンラインのチートシートとして使用したりしています。