2

たとえば、MathJax区切り文字の間に含まれるすべてのテキストを削除しようとしています$str1 = blah blah \( 2*(2+2) = 8\) blah blah \[ \int_0^1 f = [F]_0^1 \]

おそらくお気づきかもしれませんが、区切り文字は\(...\)and\[...\]であり、...パーツには任意の文字が含まれている可能性があります()[]\

ケースだけを考えて\[...\]、これを試してみました

$text = preg_replace("/\\\[.*\\\]/","",$text);

しかし、それは何らかの理由で私の表現と一致しませんが、

$text = preg_replace("/.\[.*\\\]/","",$text);

私の表現と一致します(ただし、などの不要な表現もありa[...\]ます。

したがって、私の質問は2つあります。

  1. 何が問題なの\\\[ですか?
  2. 真ん中の。*よりも良いことをすることはできます\か?]\]

前もって感謝します!

4

2 に答える 2

3
  1. あなたは使用する必要があります

    preg_replace("/\\\\\\[.*\\\\\\]/", "", $str1);

    関数のパターンパラメータpreg_replaceは通常のPHP文字列であるため、\\に置き換えられ\て次の正規表現パターンになります。

    /\\\[.*\\\]/

    最初の2つの円記号は、サブジェクトの円記号と一致し\\、残りの円記号とはそれぞれ一致します。\[\][]

  2. はい、できます。いわゆるネガティブルックアヘッドゼロ幅アサーションを使用できます。詳細については、 http://www.regular-expressions.info/lookaround.htmlをご覧ください。あなたの場合、私は次のようなことを試みます:

    preg_replace("/\\\\\\[(?:(?!\\\\\\]).)*\\\\\\]/","",$str1);

    遭遇する?!\\\\\\]とすぐに試合を停止します。\]?:、括弧の外側のペアがキャプチャされないようにします。

于 2013-03-25T20:36:05.527 に答える
1

いずれかの区切り文字に一致する正規表現は次のとおりです。

preg_replace('/\\[\[\(].*?\\[\]\)]/', '', $data); 
于 2013-03-25T20:34:37.253 に答える