问号

时间:2016-06-16 12:27:00

标签: c# regex

我需要验证字符串是否具有以下格式

anyName?[anyName=anyName;anyName=anyName]

其中anyName是来自Aa-Zz和0-9的所有数字字母的组合 和[]中的anyName = anyName对的数量至少为一个

开始使用此[A-Za-z0-9]+\?[[A-Za-z0-9]=[A-Za-z0-9]....]任何帮助?

2 个答案:

答案 0 :(得分:4)

您可以使用

^[A-Za-z0-9]+\?\[[A-Za-z0-9]+=[A-Za-z0-9]+(?:;[A-Za-z0-9]+=[A-Za-z0-9]+)*]$

请参阅regex demo

<强>击穿

  • ^ - 字符串开头
  • [A-Za-z0-9]+ - 一个或多个字母数字
  • \? - 文字?
  • \[ - 文字[
  • [A-Za-z0-9]+ - 1个以上的字母数字符号
  • = - 文字=
  • [A-Za-z0-9]+ - 1个以上的字母数字符号
  • (?:;[A-Za-z0-9]+=[A-Za-z0-9]+)* - 零个或多个序列:
    • ; - 文字;
    • [A-Za-z0-9]+=[A-Za-z0-9]+ - 见上文
  • ] - 文字]
  • $ - 字符串结尾

使用不区分大小写的修饰符和\d

缩短一点
(?i)^[A-Z\d]+\?\[[A-Z\d]+=[A-Z\d]+(?:;[A-Z\d]+=[A-Z\d]+)*]$

要使\d仅匹配0-9范围而不允许使用Unicode数字,请使用RegexOptions.ECMAScript选项进行编译。

可能的C#正则表达式声明是:

var rx = new Regex(@"^[A-Z\d]+\?\[[A-Z\d]+=[A-Z\d]+(?:;[A-Z\d]+=[A-Z\d]+)*]$", RegexOptions.IgnoreCase | RegexOptions.ECMAScript);

答案 1 :(得分:1)

我不能发表评论,因为声誉,但Wiktor的回答假设anyName本身至少有一个字符长。如果不是这种情况你需要这样做

^[A-Za-z0-9]*\?\[[A-Za-z0-9]*=[A-Za-z0-9]*(?:;[A-Za-z0-9]*=[A-Za-z0-9]*)*]$
  • *匹配0或更多
  • +匹配1个或更多
  • {x, y}匹配x和y包含