7

Objective-Cで正規表現を書いています。

エスケープ シーケンス\wは不正であり、警告を発するため、正規表現は;の/\w/ように記述する必要があります。@"\\w"エスケープ シーケンス\?明らかに有効であり、警告を発しないため、正規表現は次の/\?/ように記述する必要があります@"\\?"(つまり、バックスラッシュをエスケープする必要があります)。

疑問符は\t\nのように見えないわけではないのに、なぜ\?有効なエスケープ シーケンスがあるのでしょうか?

編集:明確にするために、私は量指定子について尋ねているのではなく、文字列のエスケープシーケンスについて尋ねています。つまり、これは警告を発しません。

NSString *valid = @"\?";

対照的に、これ警告を発します (「不明なエスケープ シーケンス '\w'」)。

NSString *invalid = @"\w";
4

2 に答える 2

-2

?正規表現では量指定子であり、0 または 1 回の出現を意味します。+または量指定子に追加すると、*「遅延」になります。

たとえば、正規表現o?を文字列foo?に適用すると、 o.

ただし、正規表現o\?inは、任意の量指定子ではなく、文字列内のリテラルの疑問符を検索しているため、 にfoo?一致します。o?

に正規表現o*?を適用すると、foo?に一致しooます。

数量詞の詳細については、こちらをご覧ください。

于 2013-08-09T20:31:17.117 に答える