定期的な置換を使用して特定のコンテンツを削除する

    従来、同社のネットワーク制限により、一部のWebサイトではユーザー名とパスワードによるログインはできず、ブラウザからはWebサイトを開くことができましたが、ログインしていないユーザーはWebサイトを開くことができないという問題がありました。ブログのコードをコピーしますが、これは少し面倒でした。

    幸いなことに、これらのコードは、Web ページのソース コードを表示することで入手できます。以下に示すように、csdn のコードが表示されます。

    HTML要素の内容を取得する方法は次のとおりです。

     1. F12 を開き、開発者のデバッグ インターフェイスに入ります。

     2. 要素タブページに切り替えます。

     3. マウスを使用してコード部分を選択します。

     4. 要素をコピーします。

   このコンテンツを解析する際には主にhtmlタグで囲まれているため、タグ部分を削除する必要があります。

    HTMLタグには特徴があり、タグはペアで表示され、すべてのタグを削除するとコンテンツ部分だけが残ります。この考えを念頭に置いて、作業を開始できます。

    ここでは、<div> または </div> に似たタグを削除するために、通常の置換を使用することを検討してください。通常の <.*> を直接渡すと、すべてが強制終了される可能性があります。<div>xxx</div> は実際には <.*> と一致するためです。両側の <div> と </div> を単に削除することはできません。

    ここで考慮する必要があるのは、<> 内に終了タグ「>」を含めることはできないということです。これは少し理解するのが難しいようです。これは、開始タグ <div> であっても、終了タグ</div>。

     この要件に応じて、正規表現 <[^>]+> が再度変更され、置換効果は次のようになります。

    交換後はコード部分だけが残ります。必要なものだけを。

    それについて少し話させてください。これは正規表現の書き込みをサポートする notepad++ を使用して行われるため、置換インターフェイスで次のような情報を確認できます。

    検索モードでは、これらのタグを削除し、一致するコンテンツを直接何も置き換えないため、正規表現に切り替える必要があります。そのため、「置換」に何も入力する必要はありません。最後に、「すべて置換」を選択します。

    置換のもう 1 つの例です。ここでは Java コードを通じて実装します。

    次のような文字列があるとします。

[{"name":"buejee","id":101,"email":[],"mobile":"15909062001"},{"name":"lucky","id":102,"email":["[email protected]"],"mobile":"15909062002"}]

    json形式ですが文字列として存在するのでメール部分を削除する必要があります。上の例には、それぞれ"email":[]   と  "email":["[email protected]"] という 2 つの電子メールがありますそれらをすべて削除するには、正規表現を次のように記述できます。

"email":\[[^\]]*\], 

    このうち [^\]]* は [] の中に [] を含めることはできないことを意味します。ここでの * は、コンテンツに複数の文字を含めることも、何も含めることもできず、 [] と [ "[email protected]"] に一致することを意味ますまた、「[」や「]」そのものが正規表現におけるキーワード記号となるため、ここでエスケープする必要があります。Java では、エスケープ記号は 2 つのバックスラッシュ\\です

    プログラムコードは次のとおりです。

package com.xxx.reg;

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class StringReplace {
    public static void main(String[] args) {
        String str = "[{\"name\":\"buejee\",\"id\":101,\"email\":[],\"mobile\":\"15909062001\"},{\"name\":\"lucky\",\"id\":102,\"email\":[\"[email protected]\"],\"mobile\":\"15909062002\"}]";
        Pattern pattern = Pattern.compile("\"email\":\\[[^\\]]*\\],");
        Matcher matcher = pattern.matcher(str);
        System.out.println(str);
        String result = matcher.replaceAll("");
        System.out.println(result);
    }
}

    操作結果:

     印刷結果はメール部分を削除するだけです。

    これら 2 つの例には同じ部分があります。つまり、削除されたコンテンツはフィルタリングする必要があり、貪欲に一致させることはできません。そうでない場合、効果は達成されません。特定のマークの出現を制限するには、通常の [^] 構文を使用します。

おすすめ

転載: blog.csdn.net/feinifi/article/details/131236766