And*_*eas 5 .net c# regex string
使用C#,我需要使用LIKE命令准备一个搜索文本,以便在SQL Server数据库中进行搜索,方法是用%字符替换引号外的所有空格.例:
输入:
my "search text"
Run Code Online (Sandbox Code Playgroud)
输出:
%my%search text%
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.在替换文本之前,我可以处理具有奇数引号的输入字符串.
如果你必须使用正则表达式,你可以这样做,如果你确定所有引号都是正确平衡的,并且如果\"字符串中没有转义的引号()(也可以考虑这些,但它会使正则表达式更复杂).
resultString = Regex.Replace(subjectString,
@"[\ ] # Match a space (brackets for legibility)
(?= # Assert that the string after the current position matches...
[^""]* # any non-quote characters
(?: # followed by...
""[^""]* # one quote, followed by 0+ non-quotes
""[^""]* # a second quote and 0+ non-quotes
)* # any number of times, ensuring an even number of quotes
$ # until the end of the string
) # End of lookahead",
"%", RegexOptions.IgnorePatternWhitespace);
Run Code Online (Sandbox Code Playgroud)
这将检查字符串的其余部分,以在当前空格字符后声明偶数引号.前瞻的优势(感谢Alan Moore!)是它比lookbehind更具可移植性(除了.NET之外的大多数正则表达式以及其他一些不支持lookbehind断言内的无限重复).它也可能更快.
涉及lookbehind的原始解决方案如下:
resultString = Regex.Replace(subjectString,
@"(?<= # Assert that the string up to the current position matches...
^ # from the start of the string
[^""]* # any non-quote characters
(?: # followed by...
""[^""]* # one quote, followed by 0+ non-quotes
""[^""]* # a second quote and 0+ non-quotes
)* # any number of times, ensuring an even number of quotes
) # End of lookbehind
[ ] # Match a space (brackets for legibility)",
"%", RegexOptions.IgnorePatternWhitespace);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4232 次 |
| 最近记录: |