gpt4 book ai didi

Regex.Replace 格式化查询

转载 作者:行者123 更新时间:2023-12-01 09:24:59 25 4
gpt4 key购买 nike

我在 VB.Net 中工作并尝试使用 Regex.Replace 来格式化我用来查询 Sql 的字符串。我要做的是删除评论“--”。我发现在大多数情况下,以下内容可以满足我的需要。

string = Regex.Replace(command, "--.*\n", "")


string = Regex.Replace(command, "--.*$", "")

但是我遇到了一个问题。如果我的查询中有一个包含双破折号字符串的字符串,它不起作用,替换将只删除从双破折号开始的整行。这让我知道为什么,但我无法弄清楚我需要匹配的正则表达式。

从逻辑上讲,我需要匹配以“--”开头且不以“'”开头且不以“'”开头且其间包含任意数量的字符的字符串。但我不确定如何在正则表达式中表达。我尝试了以下变化:
string  = Regex.Replace(cmd, "[^('.*)]--.*\n[^(.*')]", "")

我知道这显然是错误的。我查看了一些在线资源,包括 http://www.codeproject.com/KB/dotnet/regextutorial.aspx
但由于我缺乏理解,我似乎无法弄清楚这一点。

最佳答案

我认为您的意思是“匹配以 -- 开头的字符串,并且不以 ' 开头,并且不跟在 ' 之后,中间有任意数量的字符”

如果是这样,那么这就是您要查找的内容:

string  = Regex.Replace(cmd, "(?<!'.*?--)--(?!.*?').*(?=\r\n)", "")
'EDIT: modified a little

当然,这意味着您的评论中不能有撇号......如果有人愿意的话,这将非常容易被破解(您不会考虑使用它来防止注入(inject)攻击,是吗? ARE YOU! ??! :D )

如果您愿意,我可以分解表达式,但它与我上面修改过的引用基本相同!

编辑:

我稍微修改了表达式,所以它不消耗任何回车,只有注释本身......表达式说:
(?<!     # negative lookbehind assertion*
' # match a literal single quote
.*? # followed by anything (reluctantly*)
-- # two literal dashes
) # end assertion
-- # match two literal dashes
(?! # negative lookahead assertion
.*? # match anything (reluctant)
' # followed by a literal single quote
) # end assertion
.* # match anything
(?= # positive lookahead assertion
\r\n # match carriage-return, line-feed
) # end assertion
  • 否定的lookbehind断言意味着在匹配的这一点上,向后看并断言这不能匹配
  • 否定前瞻断言意味着从这一点向前看并断言这不能匹配
  • 肯定前瞻断言以下表达式可以匹配
  • 不情愿意味着如果您无法匹配后面的表达式,则仅消耗前一个原子的匹配项(. 在这种情况下表示所有内容)。因此 .*? 中的 .*?-- (当应用于字符串 abc-- 时)将消耗 a ,然后检查 -- 是否可以匹配并失败;然后它将消耗 ab ,但再次停止以查看 -- 是否可以匹配并失败;一旦它消耗abc并且--可以匹配(成功),它最终将消耗整个abc--
  • 不情愿或“贪婪”,如果没有 .* 将是 ? 将匹配 abc--.* ,然后尝试将字符串的结尾与 -- 匹配并失败;然后它将回溯,直到它可以匹配 --
  • 另外一个注意事项是 . “任何东西”默认情况下不包括换行符(回车/换行符),这是正常工作所必需的(有一个开关允许 . 匹配换行符,它将打破这个表达式)

  • 一个很好的资源——我学到了 90% 的关于正则表达式的知识——是 Regular-Expressions.info

    小心行事,祝你好运!

    关于Regex.Replace 格式化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8185568/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com