0

私は次のことを試みています:

.+\?[^\?].+\?

つまり、"?" までのすべてに一致し、他に "?" がない場合は、その後、別の "?" まですべてを一致させます。最初の .+ がすでに文字列全体に一致しているため、機能していないと思います。

4

1 に答える 1

4

あなたの説明は正確ではありませんが、正規表現が満たす必要があると私が想定するルールは次のとおりです。

  1. 「?」以外の 0 個以上の文字
  2. 「?」
  3. 「?」以外の 1 つ以上の文字
  4. 「?」

これは実際には非常に簡単です。

[^?]*\?[^?]+\?

これは、より大きな文字列の部分文字列と一致することに注意してください。文字列全体がこれと正確に一致することを確認する必要がある場合は、以下をスローし^$アンカーします。

^[^?]*\?[^?]+\?$

説明:

  1. ^

    文字列の開始。複数行のコンテキストでは、これは行頭にも一致しますが、おそらく複数行のコンテキストではありません。

  2. [^?]

    リテラル文字 ' ' 以外のものに一致し?ます。

  3. *

    前のトークンの 0 個以上に一致します。

  4. \?

    リテラル ' ?' に一致します。

  5. [^?]

    リテラル文字 ' ' 以外のものに一致し?ます。

  6. +

    前のトークンの 1 つ以上と一致します。?これにより、2 つの ' ' を続けて使用できなくなります。

  7. \?

    リテラル ' ?' に一致します。

  8. $

    文字列の末尾 (または複数行コンテキストの行の末尾) に一致します。


?注:最初の ' ' の前に0 個以上の非 ' ' があると想定しました?。これは のようなものに一致します?abc?。これが違法な場合は、最初の*をに変更し+ます。

于 2012-08-17T23:48:57.197 に答える