2014-07-06 3 views
-2

나는 모두가 @와 의사로 시작하는 많은 문자열을 가지고 있으며,이 가상을 정규식을 통해 실제 이름으로 변경하려고합니다. 나는 많지 않은 의사 (아마 5 ~ 10)가 그래서 같은 간단한 정규식으로 갈 수Multiple preg_replace

 $find = array('@alex', '@donald'); 
     $replace = array('Alex A.', 'Donald B.'); 
     $result= preg_replace($find, $replace, $feed->itemTitle); 

내 문제는 내가 이미 링크를 제거 이러한 문자열에 pre_replace을 가지고있다. 지금까지 이것은 나의 정규식입니다 :

<?php echo preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)[email protected]',' ',$feed->itemTitle); ?> 

2 개의 정규식을 혼합 할 솔루션을 찾을 수 없습니다. (정규식은 제가 편하지 않은 것입니다).

+0

혼합하지 마십시오. 두 개의'preg_replace()'문에서 그것들을 수행하십시오. –

+0

감사합니다. Amal! 어떻게해야합니까? – Enora

+0

여러 개의 문자열을 대체하는 경우 배열을 검색 및 대체 매개 변수로 사용하여'str_replace()'를 사용하십시오. 예제는 ['str_replace()'docs (http://php.net/str-replace)를보십시오. –

답변

2

링크에 이미 preg_replace을 갖고있는 것은 문제가되지 않으므로 신경 쓰지 마세요.

preg_replace_callback과 함께 사용할 캡처 그룹이있는 거대한 패턴을 만들려면 캡처 그룹 번호에 따라 반환 할 대체 문자열을 콜백 함수가 선택할 수 있도록 할 수 있습니다. 그러나 이것은 좋은 방법이 아닙니다.

, 당신이 고정 문자열을 대체 할 이후

(@alex, @donald 고정 된 문자열) 가장 빠른 방법은 (당신이 캐릭터를 두 번째로 구문 분석하는 경우에도) strtr를 사용하는 것입니다 :

$trans = array('@alex' => 'Alex A.', 
       '@donald' => 'Donald B.'); 

$result = strtr($feed->itemTitle, $trans); 
+0

너는 남자 야! 정말 고마워! 정말 대단해! – Enora