Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP regexp-从查询字符串中删除未使用的约束_Php_Sql_Regex - Fatal编程技术网

PHP regexp-从查询字符串中删除未使用的约束

PHP regexp-从查询字符串中删除未使用的约束,php,sql,regex,Php,Sql,Regex,背景 我正在编写一小段代码,它将遍历一些动态创建的表单的字段,并从中创建数据库select SELECT some_col FROM some_tab WHERE col1=%fieldName1 AND col2=%fieldName2 AND col3=%fieldName3 我遍历表单的字段,并用存储在特定字段中的值替换“%fieldName”。我的问题是,并不是查询字符串中提到的所有字段都可以在表单中列出。因此,在用值替换一些字段名之后,我想从查询字符串中删除其余字段名 问题 我想删除

背景

我正在编写一小段代码,它将遍历一些动态创建的表单的字段,并从中创建数据库select

SELECT some_col FROM some_tab WHERE col1=%fieldName1 AND col2=%fieldName2 AND col3=%fieldName3
我遍历表单的字段,并用存储在特定字段中的值替换“%fieldName”。我的问题是,并不是查询字符串中提到的所有字段都可以在表单中列出。因此,在用值替换一些字段名之后,我想从查询字符串中删除其余字段名

问题

我想删除一个以“AND”开头、以“”结尾并包含“=%”的字符串。你能帮帮我吗

您可以使用:

$query=preg_replace('% AND [a-z0-9A-Z]+\=\%[^\s]+%','',$query);
使用以下命令:

$replaced = preg_replace('~AND.*?=%\S*[ ]~', '', $yourstring);
解释

  • 匹配文本
  • *?
    惰性地匹配所有内容,直到
  • 文本
    =%
  • \S*
    匹配任何非空格的字符
  • []
    匹配一个空格(不需要括号,但便于识别)
  • 我们将替换为空字符串

为了纯粹解决您的问题,您可以尝试
^和。*%.*$
。但是,由于AND包含在字符串中(而不是字符串本身),类似这样的内容应该更合适:
和。*%.*
和[a-zA-Z0-9=]*%[a-zA-Z0-9=]*?
会更好。yetI误读了您的问题,并且没有看到您希望表达式始终包含
=%
(我的检查始终是
%
,但会验证没有等号的表达式,即使有2或3个等号)。您应该使用
和\w*=%\w*?
。\w相当于[a-zA-Z0-9]