Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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# Regex允许使用禁止的字符串-有人能提供建议吗?_C#_Regex - Fatal编程技术网

C# Regex允许使用禁止的字符串-有人能提供建议吗?

C# Regex允许使用禁止的字符串-有人能提供建议吗?,c#,regex,C#,Regex,我想测试一个字符串是否与许多模式中的一个完全匹配 我想我可以用它来做这件事 myRegex.IsMatch(testString) && myregex.Match.ToString()==testString 但这可以在正则表达式模式本身中实现吗 我想测试testString是否与DOC或EMAIL完全匹配,或者与HTML::sometexthere或CSV::sometexthere匹配。 例如,它不能与DOC::sometexthere匹配-这应该是“失败” 我当前的正

我想测试一个字符串是否与许多模式中的一个完全匹配

我想我可以用它来做这件事

myRegex.IsMatch(testString) && myregex.Match.ToString()==testString 
但这可以在正则表达式模式本身中实现吗

我想测试testString是否与
DOC
EMAIL
完全匹配,或者与
HTML::sometexthere
CSV::sometexthere
匹配。 例如,它不能与
DOC::sometexthere
匹配-这应该是“失败”

我当前的正则表达式模式是
^(DOC | EMAIL)|((CSV | HTML):.+)
,但它允许禁止的字符串,例如
DOC::sometexthhere


TIA

您的模式是正确的,但必须添加“字符串结束”锚定
$

 ^((DOC|EMAIL)|((CSV|HTML)::.+))$

请注意,我已将这两种可能性括在括号内。

以下正则表达式应该完全按照您的要求执行:
((DOC | EMAIL)|((HTML | CSV)::*)

在以下字符串上进行了测试:

  • 文档匹配
  • 电子邮件匹配
  • 电子邮件::someTextHere-不匹配
  • DOC::someTextHere-不匹配
  • HTML::SomeTextHere-匹配
  • CSV::someTextHere-匹配
更新 换成这个,它会完全满足你的需求

((DOC|EMAIL)$|((HTML|CSV)::.+))

添加了$,这样它就不会在DOC::sometext中捕获文档,将*改为+,这样它至少应该在::

后面包含一个字符,谢谢-我已经尝试了$的想法,但正是额外的一对括号起了作用。@NeilHaughton:是的,如果你省略了这一点,结束锚只用于模式的第二部分。我猜^(Something here)$表示“以同一事物开始和结束”,实际上意味着完全匹配,但它是否也可以匹配“DOCDOC”,例如:@NeilHaughton:不,它不匹配。
^
表示“字符串的开始”;
$
表示“字符串的结束”,仅此而已。为什么外括括号会产生不同?这不是意味着“必须从括号中的所有内容开始,并且必须以括号中的所有内容结束”吗?我试图理解为什么这并不含糊,允许使用DOCDOC而不仅仅是DOC(例如),我需要使用“+”而不是“*”:在::之后必须有内容,否则它也无效。确实可以用+替换*。(将其从0或更多更改为1或更多匹配项)