2011-02-16 3 views
1

예컨대 PHP에서 문자열의 특수 문자열을 제거하는 가장 빠르고 가장 빠른 방법은 무엇입니까?

$stringOriginal = "C D E F G H I J K L M N"; 

$stringRemove = "E F M"; 

그리고 나는 내가

$result = "C D G H I J K L N"; 

가 대단히 감사합니다 얻을 수 있습니다, $ stringOriginal에서 $ stringRemove의 문자열을 제거 할! 그래서!

+3

이들은 항상 문자일까요? 아니면이 단어들입니까? (보안 위험이 아니라면 실제 데이터를 요구하고 있다고 생각합니다.)이를 달성하기위한 선택의 여지가 많습니다. –

답변

3

비 레그 방법 $stringRemove

$stringOriginal = "C D E F G H I J K L M N"; 
$stringRemove = "E F M"; 

$removals = explode(' ',$stringRemove); 
$result = str_replace($removals,'',$stringOriginal); 
$result = str_replace(' ',' ',$result); 
+1

이것은 내 upvote를 얻습니다. 단지 하나의'str_replace()'호출을 나열한 다른 대답은 명확하지 않거나 잘못되었습니다. – BoltClock

+0

@ BoltClock/@ MarkBaker : 이들이 토큰이 아니고'$ needle'이 다른 토큰에 있지 않으면. –

+0

마지막으로 이중 공백을 한 공백으로 바꿉니다. 여러 번 삭제 한 경우에도 도움이되지 않습니다. 재귀 적 솔루션이 도움이 될 수 있지만, IMHO는 더 이상 우아하지 않습니다. – s3v3n

1
$result= str_replace($stringRemove, "", $stringOriginal); 

그러나 $ stringRemove는 사용중인 형식이 아닌 array('E', 'F', 'M');이 될 것입니다.

1

사용 preg_replace이다 :

//no spaces needed in the filter 'E F M' should be 'EFM' for this function 
function specialFilter($body, $filter) { 
    return preg_replace("/[$filter]/", '', $body); 
} 

//example usage 
$filteredMessage = specialFilter('C D E F G H I J K L M N', 'EFM'); 

//if double spaces are not allowed after the filtered elements are removed run this 
$filteredMessage = str_replace(' ', ' ', $filteredMessage); 

참조 : preg_replace 여기 & str_replace

1

내가 할 것 인 것이다 :

echo implode(' ', str_replace(explode(' ', $stringRemove), '', explode(' ', $stringOriginal))); 

여전히해야 할 것입니다, 그래서 그것은 "CDGHIJKLN"를 반환 잘못된 공백이 있는지 확인하십시오 (쉽습니다).

+0

빙고. 이것들은 단지 편지가 아닌 토큰이기 때문에 이것은 나의 지시이기도합니다. 단지 알파벳을 제거하는 것이라면,'str_replace'는 그 필요를 충족시킵니다. '$ needle'이 다른 엔트리에있을 수 있다면 이것은 가장 적합합니다. –

0

모든 사람이 str_replace를 사용하고있는 것처럼 보입니다. 그러나 내 두려움에 토큰이 있으며 값이 다른 값 내에 중첩 될 수 있습니다. 어쩌면 내가 틀렸다이 과잉이지만, 솔루션 방법 중 하나를 내 초기 생각 것,

string(17) "C D G H I J K L N" 
2

귀하의 질문에 제공된 것보다아무것도 더 많은 가정 :

$stringOriginal = "C D E F G H I J K L M N"; 
$stringRemove = "E F M"; 

var_dump(implode(' ',array_diff(explode(' ',$stringOriginal),explode(' ',$stringRemove)))); 

결과 preg_replace를 사용하고 (옵션 공백)이 문자를 찾을 수 :

$stringOriginal = "C D E F G H I J K L M N"; 
print preg_replace('/(E|F|M)\s+?/', '', $stringOriginal); 

출력한다 :를

+0

정규 표현식이 최선의 해결책이라고는 생각하지 않지만 정규 표현식에 대한'\ b' 지시어에 대해 말씀 드리고자합니다. –

+0

@Brad 우수 제안, 그러나 나는 그 질문이 무엇을 나타 냈는지보다는 오히려 그 질문이 무엇에서 왔는지 간단하게 일하고있었습니다. 사용자가 단일 문자가 아닌 단어를 찾는 경우 접근 방식을 조정해야합니다. – Sampson

관련 문제