[^a-c]
과 같은 표현식을 사용하면 모든 문자를 제거 할 수 있습니다. 문자는 a, b, c
이외의 모든 문자와 일치합니다. 문자 시퀀스 (예 : sc
)의 경우 이는 물론 작동하지 않습니다.
하지만 캐릭터를 알고 싶다면 게임을 돌릴 수 있습니다.
<?php
$text = 'hello <script> |world #/foo';
$allowed = array('<', '>', 'p', 'sc', '|', '#');
array_walk($allowed, function(&$value){
$value = preg_quote($value, '#');
});
$pattern = '#' . join('|', $allowed) . '#iu';
$text = preg_match_all($pattern, $text, $matches);
$text = join('', $matches[0]);
echo $text, "\n";
보너스 질문 : 당신이 나머지를 무시 유지하려면 무엇을 추출 내가 UTF-8 aswell 작동하는지 확인 mb_ereg_match를 사용해야합니까?
PCRE는 /u
플래그로 UTF-8을 수행 할 수 있습니다. mb_ereg_ *는 후자
foreach ($allowed as &$value) {
$value = preg_quote($value, '#');
};
이다 가
array_walk($allowed, function(&$value){
$value = preg_quote($value, '#');
});
마찬가지로 잘 될 수 PCRE보다 느리고 UTF-8
ISO-8859-1 이외의 캐릭터 세트를 처리하는 경우에만 사용되어야 아마 조금 빠른 ...
큰 대답! 대괄호를 사용하기 위해 몇 가지 사소한 수정 사항을 추가해야했지만 정확하게 찾고자했습니다. 또한 몇 주 전에 보너스 질문에 대한 답변을 읽어 보았습니다. 얼마나 빨리 잊을 수 있는지 궁금합니다;) – Seralize
'array_walk ($ allowed, 'preg_quote')'에서'preg_quote'를 직접 사용할 수 없습니다. 'array_walk'가 처음에는 값을 전달하고 키는 두번째 매개 변수로 전달하지만'preg_quote'는 두번째 매개 변수가 구분 기호가 될 것으로 예상하기 때문입니다. – Gumbo
당신은 완전히 G 보입니다. 예를 업데이트했습니다. – rodneyrehm