在c#上表示通配符

use*_*434 4 c# regex oracle wildcard

我正在尝试使用Regex类在我的c#程序上实现两个oracle通配符"%"和"_".问题是当我有通配符"_"因为我只需要接受一个字符,但每次我至少有一个字符时它返回true.你能帮我么?

这是我的代码:

string filter, string1;

string wildcard1 = "[" + "\\d | " + "\\n | " + "\\s |" + "\\w]+";
string wildcard2 = "[" + "\\d | " + "\\n |" + "\\s | " + "\\w]{1}";

filter = Regex.Replace(filter, "%", wildcard1);
filter = Regex.Replace(filter, "_", wildcard2);

Regex regex1 = new Regex(filter, RegexOptions.IgnoreCase);

MatchCollection a = regex1.Matches(string1);

if (regex1.IsMatch(string1))
{
    return true;
}
Run Code Online (Sandbox Code Playgroud)

Jot*_*aBe 5

您必须进行以下两次转换:

  • %to .*,意思是"任何角色,任何次数"
  • _.这意味着"任何字符(一次在默认情况下,如果你没有另行指定)"

您还必须^在开头和$结尾添加,以强制匹配整个字符串,而不是其中的一部分.

最后,这非常重要,你必须逃避原来的字符串.如果不这样做,正则表达式将处理任何特殊字符.即.原始字符串中的点将被解释为正则表达式中的"任何字符".

例如,如果您有此SQL LIKE字符串:

  Hello, %, is your inital _?
Run Code Online (Sandbox Code Playgroud)

你必须将其转换为:

  ^Hello, .*, is your inital .\?$
Run Code Online (Sandbox Code Playgroud)

(这将匹配像"你好,约翰,你的初始J?"这样的字符串)

首先,你必须转义它,以便?使用反斜杠转义和任何其他特殊字符\.

然后替换%_添加字符串字符的开头和结尾(^$).

还要注意,您可以使用选项创建正则表达式,其中一个选项可让您指定它是否区分大小写.这也是模仿Oracle行为的必要条件.

最后,使用IsMatch(string)方法而不是Match.