0

一重引用符で囲まれたテキストをキャッチしたいのですが、エスケープされた一重引用符 (\') は区切り文字と見なされるべきではありません。たとえば、次のようになります。

この日は「最高ではなかった」

戻る

  • 最高ではなかった

ありがとう。

私はこれを試しました:

    public static List<String> cropQuoted (String s) {

    Pattern p = Pattern.compile("\\'[^']*\\'");
    Matcher m = p.matcher(s);
    ArrayList found = new ArrayList();
    while(m.find()){
        found.add(m.group().replaceAll("\'", ""));
        System.out.println(m.group().replaceAll("\'", ""));
    }
    return found;
}

しかし、「\'best'days'to come」をキャッチできません

4

3 に答える 3

1

(?<!\\\\)'「前に'ないすべて」を意味します\

これを使用して、このようなものを作成できます(?<!\\\\)'.*?(?<!\\\\)'

テストしてみましょう

    String s="This 'wasn\\'t the best' day. Another 't\\'es\\'t Test' t\\'est";
    System.out.println(s.replaceAll("(?<!\\\\)'.*?(?<!\\\\)'", "X"));
    //out -> This X day. Test X t\'est

それはあなたが探しているものですか?

于 2012-06-02T20:47:18.023 に答える
1

正規表現は次のようになります。

"'([^'\\\\]|\\\\.)*'"

一重引用符の'後に一重引用符でもバックスラッシュでもない 0 から多数の文字が続く場合、またはバックスラッシュの後に任意の文字が続き、その後に一重引用符が続く場合と同様です。

この正規表現を参照してください

于 2012-06-02T20:11:32.583 に答える
0
(?<!\\\\)'([^'\\\\]|\\\\.)*'

ネガティブルックビハインドを使用して、開始引用符がエスケープされないようにします

于 2012-06-02T20:45:50.493 に答える