PHP regexp-从查询字符串中删除未使用的约束
背景 我正在编写一小段代码,它将遍历一些动态创建的表单的字段,并从中创建数据库selectPHP 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 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]