40

.NETRegexパターンでは、文字通り使用するためにどの特殊文字をエスケープする必要がありますか?

4

4 に答える 4

47

私は文字の完全なセットを知りませんが、とにかくその知識に頼ったり、コードに入れたりしません。代わりに、Regex.Escapeよくわからないリテラルテキストが必要な場合はいつでも使用します。

// Don't actually do this to check containment... it's just a little example.
public bool RegexContains(string haystack, string needle)
{
    Regex regex = new Regex("^.*" + Regex.Escape(needle) + ".*$");
    return regex.IsMatch(haystack);
}
于 2012-10-18T20:29:29.580 に答える
30

通常のリテラルとして使用するためにエスケープする必要がある文字のリストは次のとおりです。

  1. 角かっこを開く[
  2. バックスラッシュ\
  3. カレット^
  4. ドル記号$
  5. ピリオドまたはドット.
  6. 垂直バーまたはパイプ記号|
  7. 疑問符?
  8. アスタリスクまたはスター*
  9. プラス記号+
  10. 開き角かっこ(と閉じかっこ)
  11. 中かっこを開く{
  12. ポンド/ハッシュ記号#

これらの特殊文字は、しばしば「メタ文字」と呼ばれます。

しかし、私はJonがRegex.Escapeこれらの文字をコードにハードコーディングする代わりに使用することに同意します。

于 2013-02-09T11:26:10.537 に答える
14

I think you can get the list of chars as

List<char> chars = Enumerable.Range(0,65535)
                .Where(i=>((char)i).ToString()!=Regex.Escape(((char)i).ToString()))
                .Select(i=>(char)i)
                .ToList();

--

\t\n\f\r#$()*+.?[\^{|
于 2012-10-18T20:36:46.457 に答える
14

こちらの MSDN ドキュメントを参照してください: http://msdn.microsoft.com/en-us/library/az24scfc.aspx#character_escapes

完全なリストの問題は、コンテキストに依存することです。たとえば.、 のように括弧で囲まれていない限り、エスケープする必要があります[.]]が先行しない限り、技術的にエスケープする必要はありません[-のように括弧内にない限り、特別な意味はありません[A-Z]。as in=が前に付いていない限り、特別な意味はありません。?(?=)

于 2012-10-18T20:29:27.600 に答える