私はJavaの練習はしていませんが、正規表現のガイダンスを提供できるといいのですが。探している特定の属性と値がわかっている場合は、次のようなものを使用できます。
Pattern pattern = Pattern.compile("<tag[45].*attr\s*=\s*[\"']test['\"][^>]*>", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("<Tag1 attr='test'/><Tag2><Tag4 attr='test'/><Tag5 attr='test'/></Tag2><Tag3 attr='test'/>");
matcher.matches();
正規表現は、次のコンポーネントで構成されています。
リテラル文字列と一致します:
4または5のいずれかが続きます([45]指定)
リテラル文字列の前に任意の数の文字が続きます:attr
その後に任意の数のスペースが続きます
リテラル文字が続く:=
その後に任意の数のスペースが続きます
'または"文字が後に続く
文字列リテラルが続く:test
'または"文字が後に続く
>以外の文字が続く
続いて>
これらの余分なビットのいくつかを追加するポイントは、さまざまなコーディングスタイルなどを考慮する必要がある/検討する必要があることを強調することです。注:パターンを大文字と小文字を区別しないように設定することで簡単に削除できましたが、省略できます。そして、式を変更して適切な大文字と小文字をチェックします(たとえば、属性値で大文字と小文字が区別される場合は、「tag」リテラルを[tT] [aA] [gG]に変更して、タグとの一致を許可できます。大文字と小文字を区別しません。
jvatamanがすでにあなたの質問に答えているので、私は明らかに入力するのが遅すぎますが、おそらく私の記事には何らかの価値があるので、とにかく投稿します。