Php regex单引号仅在select和from之间,无需更改起始引号和结束引号

Php regex单引号仅在select和from之间,无需更改起始引号和结束引号,php,sql,regex,oracle,Php,Sql,Regex,Oracle,我正在使用php,我想替换oracle sql查询中的单引号 我有这样的想法: 为“堆栈溢出”选择“这是测试”,从testtable中选择“另一个”单引号,其中id='test'和另一个='test2' 我使用的是oracle,所以转义字符是双引号 我的问题是只在select和from语句之间找到单引号,替换不应删除每个字段开头和结尾的第一个单引号 答案应该是这样的 为“堆栈溢出”选择“这是测试”,从testtable中的id='test'和另一个='test2'中选择“另一个”“单引号在这里附

我正在使用php,我想替换oracle sql查询中的单引号

我有这样的想法:

为“堆栈溢出”选择“这是测试”,从testtable中选择“另一个”单引号,其中id='test'和另一个='test2'

我使用的是oracle,所以转义字符是双引号

我的问题是只在
select
from
语句之间找到单引号,替换不应删除每个字段开头和结尾的第一个单引号

答案应该是这样的

为“堆栈溢出”选择“这是测试”,从testtable中的id='test'和另一个='test2'中选择“另一个”“单引号在这里附近”

字段的数量可以不同。在我的示例中,它有两个字段,每个字段包含一个引号。但有时字段包含引号,有时不包含引号,有时字段紧跟其后,有时不包含引号

我厌倦了不同的regexp。试着想出一个解决办法,但运气不好


所以我的问题是如何实现这一点?哪个php函数或什么正则表达式?

我不认为您可以直接做您想要做的事情。 例如,如果您有
'field one','field'two'
,则可以将其解释为
'field one','field'two'
'field one','field'two'

如果可能的话,您可能想尝试以下方法:

//First put the field names in an array $fields
...

//Then you create the query string like this
$sql = "select '" . implode("', '", str_replace("'", "''", $fields) ) . "' from testtable where id='test' and another='test2'";

我不知道你为什么要这么做。通常,SQL数据库会有一个接口为您转义数据。如果您尚未使用它们,请移植您的代码库。我们使用定制的adodb库,它仅在提供字符串时提供引号转义。它在开始时添加
q'
,在结束时添加一个
'
,但这里我的问题是我有一个完整的sql查询,在这种情况下不能使用该代码。这是我们的adodb,所以你通过网络将整个查询发送给你,你需要执行它?问题是我得到了查询,我必须执行它。所有查询都是使用不同部门的不同ppl编写的。我没有可以内爆itI的文件,我认为如果没有关于查询的更多信息,您不可能创建一个无歧义的regexp。例如,如果您知道字段名称中没有逗号,并且在<代码> > <代码>之后的名称/值中没有一个引号,那么可以创建一个ReGEXP。例如,考虑“代码”>从“A”、“B”、“A”、“B”< /代码>中选择“A”、“B”,这是非常模糊的。