在string中的每个属性之前添加变量

时间:2015-03-20 14:51:38

标签: php regex wordpress

我正在使用代码在wordpress中的短代码中浏览一些属性。我在一个字符串中获得了所有属性。像这样:

$var = 'type="text" title="super title" class="master-module"';

我想将其转换为:

$var = 'data-type="text" data-title="super title" data-class="master-module"';

我试图理解使用preg替换,但我在regex上很糟糕。

感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

你可以使用这样的正则表达式:

(\w+=")

<强> Working demo

这个替换字符串:

data-$1

在应用替换字符串后,您可以在绿色和替换部分中看到匹配和捕获组的结果字符串。

enter image description here

php代码:

$re = "/(\\w+=\")/"; 
$str = "\$var = 'type=\"text\" title=\"super title\" class=\"master-module\"';\n\n"; 
$subst = "data-\1"; 

$result = preg_replace($re, $subst, $str);

更新:如果您的某个属性包含heading-type="xxx xx"这样的短划线,那么您可以使用此正则表达式:

([\w-]+=")

答案 1 :(得分:0)

你可以爆炸,在每个需要加前缀的元素上应用想要的加法,然后内嵌你的字符串以获得预期的结果:

$var = 'type="text" title="super title" class="master-module"';

$var = explode (' ', $var);
array_walk ($var, function (&$a) {
  if (strpos($a, '"') !== strlen($a) - 1)
    $a = 'data-' . $a;
});
$var = implode (' ', $var);
// data-type="text" data-title="super title" data-class="master-module"

这样,您还可以在array_walk调用中添加一个数组,以包含要修改或排除的值列表。

答案 2 :(得分:0)

这是我的最终代码和答案。

$re = '/([\w-]+=")/'; 
$str = $moduleAttribute; 
$subst = 'data-$1'; 

$result = preg_replace($re, $subst, $str);

我只有一个字。谢谢! 特别感谢@fede