正则表达式匹配字符串不是精确的字符串或模式

时间:2015-02-08 15:09:58

标签: c# regex string

我试图将模式与此正则表达式匹配

"^[a-zA-Z]{1}[a-zA-Z0-9\\s_]*(?<![Ii][Dd]|[Cc][Rr][Ee][Aa][Tt][Ee][Dd][Dd][Aa][Tt][Ee]|[Cc][Rr][Ee][Aa][Tt][Ee][Dd][Bb][Yy]|[Mm][Oo][Dd][Ii][Ff][Ii][Ee][Dd][Dd][Aa][Tt][Ee]|[Mm][Oo][Dd][Ii][Ff][Ii][Ee][Dd][Bb][Yy]|[Oo][Rr][Gg][Ii][Dd])$"

此模式应匹配任何不以数字开头的字符串或除空格,下划线,字符和数字以外的任何其他字符串,以及如果字符串正好是ID或{{1 }}或CreatedDateCreatedByModifiedDateModifiedBy。它还应检查是否检查静态字符串而不区分大小写。

  • 通过 - &#34; Bob9 Tom&#34;
  • 失败 - &#34; 9Bob Tom&#34;
  • 失败 - &#34; ID&#34;
  • 通过 - &#34; Tom Tom&#34;
  • 传递 - &#34; Tom ID&#34;
  • 通过 - &#34; IDTom&#34;
  • 通过 - &#34; TomID&#34;

2 个答案:

答案 0 :(得分:2)

您需要在开头添加一个负向前瞻,以检查不包含所提及的确切字符串的字符串。 (?i)称为不区分大小写的修饰符,它强制正则表达式引擎执行不区分大小写的匹配。

@"(?i)^(?!(?:ID|CreatedDate|CreatedBy|ModifiedDate|ModifiedBy|OrgID)$)[a-zA-Z][a-zA-Z0-9\s_]*"

DEMO

答案 1 :(得分:1)

此模式应匹配任何字符串

  • 不以数字开头

    ^\D
    
  • 或除了空格,下划线,字符和数字之外还有其他任何东西

    ^\D[ _a-zA-Z0-9]*$
    
  • 如果字符串完全是IDCreatedDateCreatedByModifiedDateModifiedBy或{{},那么它也会失败1}}。

    OrgID
  • 还应该检查是否在没有区分大小写的情况下检查静态字符串。

    ^(?!(?:CreatedDate|CreatedBy|ModifiedDate|ModifiedBy|OrgID)$)\D[ _a-zA-Z0-9]*$
    

注释

  • 最后一步可以通过使整个正则表达式不区分大小来代替。
  • ^(?!(?:(?i)CreatedDate|CreatedBy|ModifiedDate|ModifiedBy|OrgID)$)\D[ _a-zA-Z0-9]*$ 字面意思表示“不应以数字开头”。如果您的意思是“......但起始字符仍然是^\D”之一,则[ _a-zA-Z0-9]必须更改为^\D
  • 如果您将整个表达式切换为不区分大小写(我不明白为什么您不这样做),则可以用^[a-zA-Z]替换所有a-zA-Z