我正在尝试使用具有以下格式的Regex.IsMatch匹配C#中的字符串:
([这里有什么东西]这里的任何东西])+
示例:[mark[MARK]mark][[spacing]]
将是有效字符串,但[[[spacing]spacing]
将是无效字符串。
请注意
“这里有什么”
字符串不能包含
“[”或“]”
,它也可以是空的。
我尝试了类似@"(\[{1}\w*\[{1}\w*\]{1}\w*\]{1})+"
的内容,但我不知道如何告诉正则表达式引擎\w*
不能包含
“[”或“]”
谢谢!
答案 0 :(得分:1)
您需要使用balancing groups,将整个表达式括在非捕获组中,并使用+
(一次或多次出现)量化该组:
^(?:\[(?>[^][]+|(?<o>)\[|(?<-o>)])*(?(o)(?!))])+$
请参阅regex demo
<强>详情:
^
- 字符串开头(?:
- 启动非捕获+
- 量化组
\[
- [
(?>[^][]+|(?<o>)\[|(?<-o>)])*
- 搜索[
和]
或[
以外的任何1个字符(将其添加到“o”堆栈)或]
(将其从“o”堆栈中删除)(?(o)(?!))
- 如果组“o”不为空,则无法匹配,请查找下一个配对[...]
]
)+
- 内部模式的一次或多次出现$
- 字符串结束。答案 1 :(得分:1)
使用此正则表达式
^(\[[^\[\]]*\[[^\[\]]*\][^\[\]]*\])+$
正则表达式的解释:
^
匹配字符串的开头(
创办一个小组\[
匹配开始[
[^\[\]]*
匹配零个或多个字符串不 [
且不 ]
\[
再次匹配[
[^\[\]]*
匹配零个或多个字符串不 [
且不 ]
\]
匹配结束]
[^\[\]]*
匹配零个或多个字符串不 [
且不 ]
(再次)\]
匹配上次]
)
结束小组+
量词与之前的第一组或多组相匹配$
匹配字符串的结尾