你可以嘗試使用內建在str_replace函數功能來實現你在找什麼(假設沒有嵌套bracked如「測試[測試[關鍵]」):
$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]" />
和解析name屬性,你可以只是做:
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 "";
}
你能給你想從和更換什麼的例子嗎? – TwiNight
爲什麼不直接在[和]上執行str_replace?最後一次發生可能被忽略... – RonaldBarzell
您的示例代碼doesn; t似乎與您的文本描述相關。我的文本描述中根本沒有看到「名稱」,但是您使用它的isnyou代碼模式。 –