动态正则表达式捕获

时间:2015-06-16 03:54:14

标签: php regex

不确定它是否真的可行,但请考虑以下文字:

INSERT INTO cms_download_history
SET
user_id     = '{$userId}',
download_id     = '{$fileId}',
remote_addr     = '{$remote_addr}',
doa = GetDate()";

我想将其改为:

INSERT INTO cms_download_history
(user_id,download_id,remote_addr,doa)
VALUES('{$userId}','{$fileId}','{$remote_addr}',GetDate());

使用正则表达式来查找和替换这个很容易,因为我知道我有多少列但如果我在不知道列数的情况下尝试为多个类似查询执行此操作,即:

INSERT INTO mystery_table
SET
col1 = val1
col2 = val2
.... unknown number of columns and values.

我能编写一个可以检测到该示例的动态正则表达式吗?

1 个答案:

答案 0 :(得分:1)

实际上,如果所有查询都是这样的,只有可变数量的列,您可以使用一个简单的正则表达式来获取字段名称:

(\w+)\W*=\W*['"].+?(?!\\)['"],

Here is an example。这是它的作用:

  • 它会捕获一个或多个单词字符,如果后跟:
    • 零个或多个空白字符
    • 等号
    • 零个或多个空格字符(再次)
    • A '"(字符串的开头)
    • 一个或多个字符
    • 未转义的'"
    • 逗号

请注意,这确实假设所有值都是字符串。如果您还需要数字支持,请告诉我。