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)
您必须进行以下两次转换:
%
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.