我使用以下正则表达式来查找SQL参数,但在某些情况下它不起作用.
\@([^=<>\s]+)((?=\s)|$)
Run Code Online (Sandbox Code Playgroud)
如果我使用这个SQL查询,
select count(1) from (select * from tblEmailList109 where firstname='@FirstName') t
Run Code Online (Sandbox Code Playgroud)
返回的值是:
@Firstname')
Run Code Online (Sandbox Code Playgroud)
如何修改正则表达式以停止停止但不包括单引号,空格或字符串的结尾?
我的目的是在将参数传递给SQL服务器之前替换它.我知道在带有参数的普通存储过程中使用单引号不是必需的,但在我的情况下,当我进行替换时,在发送到SQL服务器时需要字符串文字的引号.
谢谢
基于Hunter McMillen的研究,以下内容可满足所有标准:
\@([\w.$]+|"[^"]+"|'[^']+')
Run Code Online (Sandbox Code Playgroud)
你的正则表达式正在捕获尾随,')因为这两个字符都包含在你的角色类中[^=<>\s]
我还想指出你的正则表达式的后半部分什么也没做
(|(?=\s)|$)
^^
Run Code Online (Sandbox Code Playgroud)
你有3个替代方案(格式(a|b|c))在这里匹配:
中间的一个(?=\s)匹配下一个字符是空格的位置,$匹配输入的结尾,但第一个替代(标记为^^)表示无匹配.因此,交替将始终匹配,因为每个字符之间没有任何匹配.
如果您将转义撇号添加到忽略列表中,它适用于您的测试用例。
\@([^=<>\s\']+)
Run Code Online (Sandbox Code Playgroud)