문제

음 ... preg_replace로 호출에서 변수를 어떻게 사용합니까?

이것은 작동하지 않았습니다.

foreach($numarray as $num => $text)
    {
        $patterns[] = '/<ces>(.*?)\+$num(.*?)<\/ces>/';
        $replacements[] = '<ces>$1<$text/>$2</ces>';
    }

예, $num 플러스 부호가 선례입니다. 예, 나는 "하고 싶다"tag the $num as <$text/>".

도움이 되었습니까?

해결책

교체 패턴은 괜찮아 보이지만 일치하는 패턴에서 단일 따옴표를 사용 했으므로 $ num 변수는 삽입되지 않습니다. 대신 시도하십시오

$patterns[] = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>';

또한 이와 같은 "알 수없는"입력에서 패턴을 구축 할 때 일반적으로 사용하는 것이 좋습니다. preg_quote. 예를 들어

$patterns[] = '/<ces>(.*?)\+'.preg_quote($num).'(.*?)<\/ces>/';

변수 이름이 주어지면 항상 숫자라고 생각합니다.

다른 팁

변수는 확장됩니다 이중 인용문으로 선언 된 문자열. 따라서 이중 인용문을 사용하십시오.

$patterns[]     = "/<ces>(.*?)\\+$num(.*?)<\\/ces>/";
$replacements[] = "<ces>$1<$text/>$2</ces>";

또는 문자열 연결 사용 :

$patterns[]     = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>';

당신은 또한 살펴 봐야합니다 preg_quote 변수에 정규 표현식 메타 문자가 포함될 수있는 경우.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top