我试图在变量的名称属性中将此“iwdnowfreedom [body_style] [var]”替换为此“iwdnowfreedom_body_style_var”。可能有几个数组键,但对于我的情况,剥离它们不应该导致任何问题。
这是我到目前为止的代码:
$pattern = '/name\\s*=\\s*["\'](.*?)["\']/i';
$replacement = 'name="$2"';
$fixedOutput = preg_replace($pattern, $replacement, $input);
return $fixedOutput;
如何解决此问题?
答案 0 :(得分:1)
你可以尝试使用str_replace函数中的build来实现你想要的东西(假设没有像“test [test [key]]”那样嵌套的bra :::
$str = "iwdnowfreedom[body_style][var]";
echo trim( str_replace(array("][", "[", "]"), "_", $str), "_" );
或者如果您更喜欢正则表达式(嵌套括号适用于此方法):
$input = "iwdnowfreedom[body_style][var]";
$pattern = '/(\[+\]+|\]+\[+|\[+|\]+)/i';
$replacement = '_';
$fixedOutput = trim( preg_replace($pattern, $replacement, $input), "_" );
echo $fixedOutput;
我认为你也意味着你可能有一个字符串,如
<input id="blah" name="test[hello]" />
并解析你可以做的名字属性:
function parseNameAttribute($str)
{
$pos = strpos($str, 'name="');
if ($pos !== false)
{
$pos += 6; // move 6 characters forward to remove the 'name="' part
$endPos = strpos($str, '"', $pos); // find the next quote after the name="
if ($endPos !== false)
{
$name = substr($str, $pos, $endPos - $pos); // cut between name=" and the following "
return trim(preg_replace('/(\[+\]+|\]+\[+|\[+|\]+)/i', '_', $name), '_');
}
}
return "";
}
OR
function parseNameAttribute($str)
{
if (preg_match('/name="(.+?)"/', $str, $matches))
{
return trim(preg_replace('/(\[+\]+|\]+\[+|\[+|\]+)/i', '_', $matches[1]), '_');
}
return "";
}