正则表达式验证仅允许在用左括号匹配时关闭括号

时间:2013-05-30 15:02:51

标签: c# regex

在正则表达式验证方面,我是一个新手。我的目标是使用以下条件验证用户输入的字符串:

  1. 字符串可能包含也可能不包含在括号中。
  2. 只允许在字符串末尾使用右括号。
  3. 只允许在字符串的开头使用左括号。
  4. 只有在末尾有一个右括号时才允许使用左括号。
  5. 只有在字符串开头有一个左括号时才允许使用右括号。
  6. 以下是有效字符串的示例:

    anytexthere
    (anytexthere)
    

    字符串无效:

    (anytexthere
    anytexthere)
    any(texthere)
    (anytext)here
    any(texthere
    any)texthere
    any()texthere
    

    非常感谢任何帮助。我真的开始怀疑只使用一个正则表达式是否可行。

    谢谢:)

1 个答案:

答案 0 :(得分:3)

您可以使用conditional

来完成
if (Regex.IsMatch(subject, 
    @"^    # Start of string
    (      # Match and capture into group 1:
     \(    # an opening parenthesis
    )?     # optionally.
    [^()]* # Match any number of characters except parentheses
    (?(1)  # Match (but only if capturing group 1 participated in the match)
     \)    # a closing parenthesis.
    )      # End of conditional
    $      # End of string", 
    RegexOptions.IgnorePatternWhitespace)) {
    // Successful match
} 

或者,当然,因为字符串只能匹配两种方式:

if (Regex.IsMatch(subject, 
    @"^     # Start of string
    (?:     # Either match
     \(     # an opening parenthesis,
     [^()]* # followed by any number of non-parenthesis characters
     \)     # and a closing parenthesis
    |       # or
     [^()]* # match a string that consists only of non-parens characters
    )       # End of alternation
    $       # End of string", 
    RegexOptions.IgnorePatternWhitespace))