4

我需要从我的 Python 脚本中的 PHP(Wordpress)配置文件中获取一些数据。我如何解析配置数据?例如,如何获取$wp_version值?配置示例:

/**
 * The WordPress version string
 *
 * @global string $wp_version
 */
$wp_version = '3.5.1';

/**
 * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
 *
 * @global int $wp_db_version
 */
$wp_db_version = 22441;

/**
 * Holds the TinyMCE version
 *
 * @global string $tinymce_version
 */
$tinymce_version = '358-23224';

/**
 * Holds the required PHP version
 *
 * @global string $required_php_version
 */
$required_php_version = '5.2.4';

/**
 * Holds the required MySQL version
 *
 * @global string $required_mysql_version
 */
$required_mysql_version = '5.0';

$wp_local_package = 'en_EN';
4

2 回答 2

6

你知道 PHP 中的一个简单变量是这样$foo = 'bar';的,让我们创建一个不考虑$_GET或的正则表达式$foo['bar']

  1. 从 开始$,注意我们需要转义它:
    \$
  2. 后面的第一个字符$不能是数字,必须是字母或下划线:
    \$[a-z]
  3. 然后后面可能有一个字母或数字或下划线:
    \$[a-z]\w*
  4. 让我们把括号:
    \$([a-z]\w*)
  5. 现在应该有“等号”,但为了使其更兼容,让我们将空格设为可选:
    \$([a-z]\w*)\s*=\s*
  6. 在此之后应该有一个值,它以一个结尾;
    \$([a-z]\w*)\s*=\s*(.*?);$
  7. 我们将使用分别匹配开始和行尾的m修饰符。^$
  8. 然后,您可以使用修剪功能来摆脱单引号和双引号。

Online demo

注 1:此正则表达式将在嵌套变量$fail = 'en_EN';处失败 $fail2 = 'en_EN';
注意 2:不要忘记使用i修饰符使其不区分大小写。

于 2013-06-02T10:11:53.093 回答
2

我编写了一个小 python 脚本来从 wordpress 的wp-config.php文件中获取拉数据库登录信息,以进行自动站点备份。

这是我的代码的相关部分(GitHub 的语法突出显示与 Python 的三重引号字符串有问题):

#!/usr/bin/env python3
import re

define_pattern = re.compile(r"""\bdefine\(\s*('|")(.*)\1\s*,\s*('|")(.*)\3\)\s*;""")
assign_pattern = re.compile(r"""(^|;)\s*\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\s*=\s*('|")(.*)\3\s*;""")

php_vars = {}
for line in open("wp-config.php"):
  for match in define_pattern.finditer(line):
    php_vars[match.group(2)]=match.group(4)
  for match in assign_pattern.finditer(line):
    php_vars[match.group(2)]=match.group(4)
于 2015-06-22T03:40:21.620 回答