php中的Preg_match / Preg_replace用于匹配模式并在php中替换它

时间:2014-02-10 12:06:21

标签: php regex preg-replace

我想用XXX替换字符串中的值

输入

insert into employees values('shrenik', 555, NULL)

输出:

insert into employees values('XXX', XXX, NULL)

我试过了:([0-9]|\'.*\')

我希望首先匹配insert into之后想要跳过字符串(。我已经在声明中提到了我需要的模式和输出。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以使用:

$sql = 'insert into employees values(\'shrenik\', 555, NULL)';
$pattern = '~(?:\binsert into [^(]*\(|\G(?<!^),(?:\s*+NULL,)*)\s*+\K(\')?(?(1)[^\']*\'|(?!NULL\b)[^\s,)]*)~i';

$sql = preg_replace($pattern, '$1XXX$1', $sql);

模式详情

~                           # pattern delimiter
(?:                         # non capturing group: where the pattern is allowed to start
    \binsert into [^(]*\(   # after "insert to" until the opening parenthesis
  |                         # OR
    \G(?<!^),               # after a precedent match if there is a comma
    (?:\s*+NULL,)*          # skip NULL values
)                         
\s*+                        # zero or more spaces
\K                          # reset all that was matched before from match result
(')?                        # optional capture group 1 with single quote 
(?(1)                       # IF capture group 1 exists:
    [^']*'                  # THEN matches all characters except ' followed by a literal '
  |                         # ELSE
    (?!NULL\b)[^\s,)]*      # matches all characters except spaces, comma, ) and the last NULL value
)                           # ENDIF
~i                          # closing pattern delimiter, case-insensitive