使用正则表达式检测“”(反斜杠)

本文关键字:正则表达式 检测 | 更新日期: 2023-09-27 18:31:05

>我有一个像这样的 C# 正则表达式

['"''''/]+

如果字符串中找到某些特殊字符,我想用它来计算和返回错误。

我的测试字符串是:

'test

我调用此方法来验证字符串:

public static bool validateComments(string input, out string errorString)
{
    errorString = null;
    bool result;
    result = !Regex.IsMatch(input, "['"''''/]+");  // result is true if no match
                                                   // return an error if match
    if (result == false)
        errorString = "Comments cannot contain quotes (double or single) or slashes.";
    return result;
}

但是,我无法匹配反斜杠。 我已经尝试了几种工具,例如正则表达式和VS2012扩展,它们似乎都很好地匹配了此正则表达式,但C#代码本身不会。 我确实意识到 C# 正在转义字符串,因为它来自 Javascript Ajax 调用,那么有没有另一种方法来匹配这个字符串?

它确实匹配/test 或 'test 或 "test,只是不 ''test

使用正则表达式检测“”(反斜杠)

'甚至被正则表达式使用。尝试"['"''''''/]+"(因此请双重逃生'

请注意,你可以有@"[""'''/]+",也许它会更易读:-)(通过使用@,你必须转义的唯一字符是",通过使用第二个""

你真的不需要+,因为最终[...]的意思是"其中之一",这对你来说就足够了。

不要吃你不能咀嚼的东西...代替正则表达式使用

// result is true if no match
result = input.IndexOfAny(new[] { '"', '''', '''', '/' }) == -1;  

我认为没有人因为更喜欢IndexOf而不是正则表达式而丢失了这项工作:-)

您可以通过像这样逐字地制作字符串来解决此问题@

result = !Regex.IsMatch(input, @"['""''''/]+");

由于反斜杠在正则表达式本身中用作转义,因此我发现在使用正则表达式库时最好使用逐字字符串:

string input = @"'test";
bool result = !Regex.IsMatch(input, @"[""''']+");
//                                     ^^
// You need to double the double-quotes when working with verbatim strings;
// All other characters, including backslashes, remain unchanged.
if (!result) {
    Console.WriteLine("Comments cannot contain quotes (double or single) or slashes.");
}

唯一的问题是你必须加双引号(具有讽刺意味的是,这是你在这种情况下需要做的)。

在 ideone 上演示。

对于微不足道的情况,我可以使用简单的测试表达式使用 regexhero.net:

''

验证

'test

RegExHero生成的代码:

string strRegex = @"''";
RegexOptions myRegexOptions = RegexOptions.IgnoreCase;
Regex myRegex = new Regex(strRegex, myRegexOptions);
string strTargetString = @"'test";
foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // Add your code here
  }
}