二重引用符のJava正規表現の間に閉じ込められていないこと、特定の文字列を検索(たとえばX)の二つの条件を満足:私は、文字列を検索したい
- が
\b(x)\b
- が一致しないパターンに一致しますパターン
".*?(x).*?(?<!\\)"
つまり
、私は完全な単語(条件1)であるのxの価値を探していますし、それがdではありません(条件2)。
" x /" m"
" x \" " + x + " except"
許容されない:Xのみ第が許容可能です。
見つかるJavaコードx?
二重引用符のJava正規表現の間に閉じ込められていないこと、特定の文字列を検索(たとえばX)の二つの条件を満足:私は、文字列を検索したい
\b(x)\b
".*?(x).*?(?<!\\)"
つまり、私は完全な単語(条件1)であるのxの価値を探していますし、それがdではありません(条件2)。
" x /" m"
" x \" " + x + " except"
許容されない:Xのみ第が許容可能です。見つかるJavaコードx?
最初の状態はストレートです。 2番目の条件を確認するには、有効な二重引用符の数を確認する必要があります。それらが偶数の場合、最初の条件で取得された文字列が有効です。
String text = "basdf + \" asdf \\\" b\" + b + \"wer \\\"\"";
String toCapture = "b";
Pattern pattern1 = Pattern.compile("\\b" + toCapture + "\\b");
Pattern pattern2 = Pattern.compile("(?<!\\\\)\"");
Matcher m1 = pattern1.matcher(text);
Matcher m2;
while(m1.find()){ // if any <toCapture> found (first condition fulfilled)
int start = m1.start();
m2 = pattern2.matcher(text);
int count = 0;
while(m2.find() && m2.start() < start){ // count number of valid double quotes "
count++;
}
if(count % 2 == 0) { // if number of valid quotes is even
char[] tcar = new char[text.length()];
Arrays.fill(tcar, '-');
tcar[start] = '^';
System.out.println(start);
System.out.println(text);
System.out.println(new String(tcar));
}
}
出力:
23
basdf + " asdf \" b" + b + "wer \""
-----------------------^-----------
http://stackoverflow.com/questions/2667727/regular-expression-to-match-text-outside-quotes-etcは、http://のstackoverflow .com/questions/632475/regex-to-pick-commas-quota以外の引用符、http://stackoverflow.com/questions/6462578/alternative-to-regex-match-all-instances-not-inside-quotes (JS) - 最善の方法は、二重引用符で囲まれた部分文字列をすべて削除することです( '' [^ "] *" ')して見つけたすべての' x 'は、グループ1に「x」をマッチさせてキャプチャすれば、あなたの結果になります。 –