php의 preg_replace에서 $ 변수 사용
-
05-07-2019 - |
문제
음 ... 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
변수에 정규 표현식 메타 문자가 포함될 수있는 경우.
제휴하지 않습니다 StackOverflow