2011-01-21 3 views
0

친애하는 선생님/부인 더 이상 사용되지 않는 ereg_replace를 preg_replace 또는 str_replace 으로 바꾸고 아래 코드와 동일한 기능을 사용할 수 있습니까?ereg_match를 preg_match로 바꿉니다

return ereg_replace("^(.*)%%number%%(.*)$","\\1$i\\2",$number); 

///this doesnt work 

return preg_replace("^(.*)%%number%%(.*)$","\\1$i\\2",$number); 

누구보다 똑똑한 단서가 있습니까?

+0

당신은'preg_ *'와'ereg_의 *을'대체하고 오늘은 이만하지 않습니다. 두 함수 모두 다른 정규식 구문을 사용하므로 PCRE 구문을 배워야합니다. 그들은 * 너무 다르지는 않지만 ... – BoltClock

답변

1

이 시도 :

return ereg_replace("^(.*)%%number%%(.*)$","\\1$i\\2",$number); 

return preg_replace("/^(.*)%%number%%(.*)$/","\\1$i\\2",$number); 

주에게/주위 정규식이된다.

+0

불만에 대한 불만 '/'가 없습니다. – Koenraad

+0

대답은 다음과 같습니다. return preg_replace ("/^(.*)%% number %% (. *) $ /", "$ i", $ number); thnx fr 노력을 – Koenraad

+0

죄송합니다, 나는/잘못된 장소에서 닫으십시오. – jb1785

0

Perl 호환 정규 표현식은 PHP의 preg_ 함수에서 사용되며 패턴 문자열에 경계 문자가 필요하며 실제 문자열 패턴의 시작 및 끝 위치와 대소 문자 구분 같은 추가 기능 속성이 정의됩니다. 예를 들어

:

$pattern = "/dog/i"; // Search pattern for "dog", case insensitive. 
$replace = "cat"; 

$subject = "Dogs are cats."; 

$result = preg_replace($pattern, $replace, $subject); 
1

나는 으로 가서 멋진 설명서을 읽습니다.

PHP 매뉴얼은 POSIX Regex에서 PCRE로 이동하기 위해 a section을 가지고 있습니다.

  1. PCRE 함수 패턴이 분리에 의해 둘러싸 이는 것을 요구한다.
  2. POSIX와 달리 PCRE 확장에는 대/소문자를 구분하는 전용 함수가 없습니다. 대신 은/i 패턴 수정자를 사용하여 지원됩니다. 다른 패턴 수정 자도 이며 일치 전략을 변경할 수 있습니다.
  3. POSIX 함수는 가장 왼쪽 일치 항목 중에서 가장 긴 항목을 찾지 만 PCRE는 첫 번째 유효한 일치 항목에서 중지합니다. 문자열이 전혀 일치하지 않으면 은 아무런 차이가 없지만 과 일치하면 에 일치하는 결과와 일치하는 속도에 큰 영향을 줄 수 있습니다. 이 차이를 설명하기 위해 "Mastering Regular Expressions"에서 다음 예제를 Jeffrey Friedl이 고려하십시오. 패턴 one (self)? (자기 충분)? 문자열 자체가 PCRE 과 일치하면 결과가 일치하지만 은 POSIX를 사용하면 전체 문자열 자체가됩니다. (하위) 문자열은 원래 문자열과 일치하지만 POSIX에서는 길이가 가장 길어야합니다.

행운을 빌어 요,
알린

+0

+1 나는 OP와 비슷한 문제에 직면했지만 그냥 preg와 ereg 교체 슬래시 구분 기호로 내 문제를 해결하지 못했습니다. 답은 올바른 위치를 가리키며, preg 함수가 사용하는 PCRE와 ereg가 사용하는 POSIX ERE와 같은 두 정규 표현식의 차이점을 나타냅니다. 감사 – Wh1T3h4Ck5

관련 문제