Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查表达式是否与正则表达式匹配_C#_Regex - Fatal编程技术网

C# 检查表达式是否与正则表达式匹配

C# 检查表达式是否与正则表达式匹配,c#,regex,C#,Regex,在C语言中,我有两个字符串:[I/text]和[S/100x20] 因此,第一个是[I/,后面是文本,最后是] 第二个是[S/后跟一个整数,然后是x,然后是另一个整数,最后是] 我需要检查给定的字符串是否与其中一种格式匹配。我尝试了以下方法: (?<word>.*?) and (?<word>[0-9]x[0-9]) (?*)和(?[0-9]x[0-9]) 但这似乎不起作用,我缺少[I/..]和[S/..]部分 我怎样才能做到这一点呢?遵循正则表达式就可以做到这一点。

在C语言中,我有两个字符串:
[I/text]
[S/100x20]

因此,第一个是
[I/
,后面是文本,最后是
]

第二个是
[S/
后跟一个整数,然后是
x
,然后是另一个整数,最后是
]

我需要检查给定的字符串是否与其中一种格式匹配。我尝试了以下方法:

(?<word>.*?) and (?<word>[0-9]x[0-9])
(?*)和(?[0-9]x[0-9])
但这似乎不起作用,我缺少
[I/..]
[S/..]
部分


我怎样才能做到这一点呢?

遵循正则表达式就可以做到这一点。匹配整个字符串

"(\[I/\w+\])|(\[S/\d+x\d+\])"
这应该很好:

Regex rex = new Regex(@"\[I/[^\]]+\]|\[S/\d+x\d+\]");
如果
[I/text]
中的文本应该只包含字母数字字符,那么@Oleg使用
\w
而不是
[^\]
会更好。另外,使用
+
意味着至少需要一个前面的字符类,并且
*
允许类是可选的。根据需要进行调整

和使用:

string testString1 = "[I/text]";
if(rex.IsMatch(testString1))
{
    // should match..
}

string testString2 = "[S/100x20]";
if(rex.IsMatch(testString2))
{
    // should match..
}
([I/\w+])) (S/\d+x\d+]

以上工作


用于处理表达式

我认为应该有\d+,因为int是必需的。并且在I/之后应该是\w+以仅匹配文本字符。是的。关于
\d+
,您是对的。我不确定文本应该包含什么,这就是为什么我将其保留为
[^\]
从技术上讲,
*
不应该是
+
,因为(根据我阅读OP的方式)预期
文本会在那里?对于[I/text],我可以如下使用它:@“[I/*?]…但是。*?和^ \或\w+之间有什么区别?我尝试了一种方法,它接受数字、字母、标点符号、空格……并且至少需要一个字符。但是区别是什么呢?
\w
匹配
a-z
0-9
中的任何字符,而
*?
匹配任何字符,包括特殊字符。最后,
[^\]
这表示一个字符类,它匹配非
]
字符的任何字符(包括符号)。如果您只想匹配a-z
的字符,则可以使用
[a-z]
。我想你把这两个例子弄糊涂了。S/后面跟数字很好;请利用它。另外,你的第二个正则表达式缺少开头的
[