1

引用符内にあるすべての疑問符をカウントする正規表現を作成しようとしています。この正規表現は JavaScript でテストされていますが、問題があれば PHP で使用するつもりです。私はそのような作品を持っていますが、十分ではありません。

ここにあります。

/(\"|\')(([^\"\'\\]|\\.)*)\?(([^\"\'\\]|\\.)*(\"|\'))/g

ご覧のとおり、エスケープされた引用符も無視したいと思います。

string があるとします"hello? \"world?\""。これは正しい 1 を返します。

でもこれは"hello? \"world??\""。これも1を返しますが、私が欲しいのは2です。どうすればこれを達成できますか?

また、これと正反対の正規表現を取得できれば、さらに愛されます(引用符で囲まれていない疑問符を数えます)。

役立つ場合、このテストに使用される関数全体を次に示します。

function countTest(str) {
    regx = /(\"|\')(([^\"\'\\]|\\.)*)\?(([^\"\'\\]|\\.)*(\"|\'))/g;

    test = str.match(regx);
    test = test ? test.length : 0;

    console.log(test);
}

編集:

また!この質問の自分のタイプミスから、文字列hello \"world?\'"も 1 を返すことに気付きました。これは簡単に修正できるようです。

4

1 に答える 1

0

だから私はそれを試してみました.1が表示される理由は、testが文字列ではなく配列として扱われるためです。だから私は交換します

test = test ? test.length : 0;

test = test ? new String(test).length - 3 * test.length + 1: 0;

つまり、配列の文字列値から「,」の 3 文字を減算していますが、最初の配列要素にコンマ文字がないため、1 を追加します。

編集:引用符の外側の疑問符のカウントについては、文字列内の疑問符の総数から上記の数を差し引くだけです。

編集: PHP の場合、おそらく new String(test) の代わりに array_slice 関数を使用し、必要に応じて乗算定数と加算定数を調整します。

于 2012-11-03T20:50:43.230 に答える