簡體   English   中英

如何確定一個字符串是否具有正則表達式元字符? (C#)

[英]How to determine whether a string has regex metacharacters? (C#)

System.Text.RegularExpressions命名空間是否可以為我提供任何發現輸入字符串具有(“ abc [0-9]”或“ ^ aeiou $”)或不具有(“ abc123”)元字符的功能? 還是我必須手動檢查某個列表中的非轉義字符?

您至少有三個選擇:

  1. 使用Regex.Escape並比較結果:

     private static bool ContainsMetaCharacters(string s) { if (String.IsNullOrEmpty(s)) { return false; } string escaped = Regex.Escape(s); return !escaped.Equals(s, StringComparison.Ordinal); } 
  2. Regex.Escape應用於每個字符以查看轉義的值是否不同:

     private static bool ContainsMetaCharacters(string s) { if (String.IsNullOrEmpty(s)) { return false; } for (int i = 0; i < s.Length; i++) { if (Regex.Escape(s.Substring(i,1))[0] != s[i]) { return true; } } return false; } 
  3. 基於元字符不應該改變的事實來創建自己的:

     private static readonly char[] _MetaChars = new char[] { '\\t', '\\n', '\\f', '\\r', ' ', '#', '$', '(', ')', '*', '+', '.', '?', '[', '\\\\', '^', '{', '|' }; private static bool ContainsMetaCharacters(string s) { if(String.IsNullOrEmpty(s)) { return false; } return s.IndexOfAny(_MetaChars) >= 0; } 

第三種方法根據您在Regex中使用的RegexOptions提供了更多控制。 例如,如果您永遠不會使用RegexOptions.IgnorePatternWhitespace,則可以將空間作為元字符刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM