PHP正则表达式 - 在这种情况下我现在做错了什么?

时间:2014-01-24 20:15:53

标签: php regex

使用正则表达式:

$pattern = "/adminvalues = \"\([^']+, '[^']+', MD5\('[^']+'\), '[^']+','[^']+','[^']+',[^']+,[^']+\)\";/";
preg_match($pattern, $data, $results);
print_r($results);

搜索以下文本(括号内的值可以更改...因此需要正则表达式...):

adminvalues = "(NULL, 'Admin12345', 'MD5(Admin12345)', 'Admin12345', 'Admin12345', 5, 0, 0)";

所以我正在寻找一种模式(在reg-ex中)基本上匹配以下(我认为......):

[adminvalues = "(] [any character] [, '] [any character] [', MD5('] [any character] ['), '] [any character] [', '] [any character]  [', ] [any character] [, ] [any character] [, ] [any character] [)";]

其中:任何字符都是(字母/数字/符号)的任意组合中的一种或多种

我使用顶部的PHP代码没有匹配 - 所以我显然做错了!我自己无法发现错误。 (我今天早上才真正开始使用正则表达式...)我做错了什么? :)

解决:(感谢Amal Murali) 在读取用作$data的php脚本时使用htmlspecialchars()(而不仅仅是显示内容)

1 个答案:

答案 0 :(得分:1)

尝试以下正则表达式:

$pattern = <<<PATTERN
~
  adminvalues\s*=\s*
  "
  \(                  
    [^,]+,\s*
    '[^']+',\s*
    MD5\('[^']+'\),\s*
    '[^']+',\s*
    '[^']+',\s*
    \d,\s*
    \d,\s*
    \d\s*
  \)
  ";
~xm
PATTERN;

Regex101 Demo