2012-12-11 3 views
0

변수의 이름 속성에서이 "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

당신은 당신이에서와로 교체하고 싶은의 예를 들어 주실 수 있습니까? – TwiNight

+0

왜 [and]에 str_replace를 사용하지 않는가? 마지막 발생은 무시 될 수 있습니다 ... – RonaldBarzell

+0

샘플 코드는 당신이 텍스트 설명과 관련없는 것 같습니다. 나는 당신의 텍스트 설명에 "이름"을 보지 못했지만, 당신은 그것이 isnyou 코드 패턴을 사용합니다. –

답변

1

당신은 당신이 (더 중첩는 "테스트 [테스트 [키]]"와 같은 bracked하지가 가정) 찾고있는 무엇을 달성 할 수없는 str_replace 함수에서 빌드를 사용하여 시도 할 수 :

$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 ""; 
} 

또는

function parseNameAttribute($str) 
{ 
    if (preg_match('/name="(.+?)"/', $str, $matches)) 
    { 
     return trim(preg_replace('/(\[+\]+|\]+\[+|\[+|\]+)/i', '_', $matches[1]), '_'); 
    } 

    return ""; 
} 
+0

어떻게 확인합니까? 문자열은 항상 iwdnowfreedom [body_style] [var]이 아니므로 name 내부의 내용에 대해 작동하는지 확인해야합니다. – spyke01

+0

문자열을 삭제하는 일종의 html 도우미 함수를 만듭니다. 그래서 "removeBrackets ($ nameStr)"처럼 만들면 이름을 출력 할 때 함수를 통해 $ nameStr을 실행합니다. – Supericy

+0

wordpress 테마 함수에서 수행 할 수 없으므로 사실 이후에 영구히 바꿔야합니다. 10 가지 기능 변경 (약 800 줄) – spyke01

관련 문제