我需要验证字符串是否具有以下格式
anyName?[anyName=anyName;anyName=anyName]
其中anyName是来自Aa-Zz和0-9的所有数字字母的组合 和[]中的anyName = anyName对的数量至少为一个
开始使用此[A-Za-z0-9]+\?[[A-Za-z0-9]=[A-Za-z0-9]....]
任何帮助?
答案 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包含