2

前に文字\がない場合は、文字を一致させようとしています。

有効État de l\'impression

無効État de l'impression

有効Saisir l\'utilisateur et le domaine pour la connexion

私が求めているのは、ネガティブな後ろ姿などの一種の主張だと思いますか?

たとえば、 RegexBuilder(?<!\\)'でテストしているときに正常に動作します

ただし、問題は、これをJavaで機能させようとしているときです。

コード

String[] inputs = new String[] { "Recherche d'imprimantes en cours…", "Recherche  d\\'imprimantes en cours…" } ;

for(String input : inputs)
{
    Pattern p = Pattern.compile("(?<!\\\\)'");
    System.out.println(input);
    System.out.println(p.matcher(input).matches());
}

出力

Recherche d'imprimantes en cours…
false
Recherche  d\'imprimantes en cours…
false

どちらが一致する必要がありますtruefalse

4

3 に答える 3

3

p.matcher(input).matches()入力全体を検証します。p.matcher(input).find()代わりに試してください。

于 2012-04-26T11:21:36.547 に答える
2

ループ内の同じパターンで Pattern.compile() を使用しないでください。「コンパイル」の目的が無効になります。

String[] inputs = new String[] { 
    "Recherche d'imprimantes en cours…", 
    "Recherche  d\\'imprimantes en cours…" 
};
Pattern pat = Pattern.compile("(?<!\\\\)'");

for (String s : inputs) {
    Matcher mat = pat.matcher(s);
    while (mat.find()) {
        System.out.format("In \"%s\"\nFound: \"%s\" (%d, %d)\n",
            s, mat.group(), mat.start(), mat.end());
    }
}   

出力:

In "Recherche d'imprimantes en cours…"
Found: "'" (11, 12)
于 2012-04-26T11:55:12.437 に答える
1

正規表現は正常に機能するはずMatcher#matches()ですが、あなたが信じているようには機能しません。文字列全体に一致する式の true のみを返します。

JavaDoc からMatcher#matches():

領域全体をパターンと一致させようとします。

于 2012-04-26T11:21:43.017 に答える