[英]Detecting “\” (backslash) using Regex
我有一个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;
}
但是,我无法匹配反斜杠。 我尝试了几种工具,例如regexpal和VS2012扩展,它们似乎都可以很好地匹配此regex,但是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
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.