私の頭の中ではかなり長い間、この問題を解決できません。私はこのコードを持っています:JavaのreplaceAllではなく、指定した正規表現
基本的に私はそれが正反対の方法で動作する必要があります - 指定された正規表現はすべて置き換えます。私は無駄な先読みでそれをやろうとしてきました。あなたの特定のタスクのために
私の頭の中ではかなり長い間、この問題を解決できません。私はこのコードを持っています:JavaのreplaceAllではなく、指定した正規表現
基本的に私はそれが正反対の方法で動作する必要があります - 指定された正規表現はすべて置き換えます。私は無駄な先読みでそれをやろうとしてきました。あなたの特定のタスクのために
、私は
getStringFromDom(doc).replaceAll(".*?(contract=\"\\d*\"|name=\"\\p{L}*\").*", "$1");
はあなたが必要なものをやるべきだと思います。
'contract'属性と' name'属性の両方がある場合、この方法は1つの属性を削除するので機能しません。 –
これはうまくいきますが、1行だけで他のすべてを置き換える方法はありますか? – Kirill
パターンに一致しないものはすべて削除します。これは単にパターンマッチをフィルタリングするのと同じです。正規表現を使用してそのパターンの一致を見つけ、文字列ビルダで一致を収集します。
これは正しいですが、私はWiktorStribiżewの解決策を取ってきましたが、少し修正しました。 Matcherは私がここで使いたかったものです。 – Kirill
あなたが探していないものを削除することは、二重否定であるとも考えています。あなたが探しているものに集中し、パターンマッチングを使用してください。この例では、任意の名前のためにあなたの文書を検索属性:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String input = "<AnotherDoc accNum=\"1111\" docDate=\"2017-09-26\" docNum=\"2222\" name=\"foo\"> <anotherTag>some date</anotherTag>";
Pattern pattern = Pattern.compile("name=\"[^\\\"]*\""); // value are all characters but "
Matcher matcher = pattern.matcher(input);
while (matcher.find())
System.out.println(matcher.group());
}
}
をこれは印刷します
name="foo"
をサンプルテキストと期待される出力を提供してください。今のところ、https://ideone.com/e6gUWgが必要なだけのように聞こえます。 –
私はxmlを持っています。たとえば、 などと書かなければなりません。 name = "foo" "とマッチャーを使用しない方が良いでしょう –
Kirill
エンジンでどんな速度で使用されても' Matcher'を使用しないのはなぜですか? –