programing

PHP에서 ereg 식을 preg로 변환하려면 어떻게 해야 하나요?

copyandpastes 2022. 10. 29. 12:16
반응형

PHP에서 ereg 식을 preg로 변환하려면 어떻게 해야 하나요?

POSIX 정규식(ereg)은 PHP 5.3.0부터 폐지되고 있기 때문에 오래된 식을 PCRE(Perl Compatible Regular Expressions)로 쉽게 변환할 수 있는 방법을 알고 싶습니다.

예를 들어 다음과 같은 정규식이 있습니다.

eregi('^hello world');

요?preg_match환성성??? ???

주의: 이 투고는 ereg에서 preg로의 변환과 관련된 모든 투고에 대한 플레이스 홀더 및 관련 질문의 복제 옵션 역할을 합니다.이 질문은 종료하지 말아 주세요.

관련:

구문의 가장 큰 변화는 딜리미터의 추가입니다.

ereg('^hello', $str);
preg_match('/^hello/', $str);

딜리미터는 영숫자, 백슬래시 또는 공백이 아닌 거의 모든 문자를 사용할 수 있습니다.으로 ""입니다.~,/ ★★★★★★★★★★★★★★★★★」#.

일치하는 대괄호를 사용할 수도 있습니다.

preg_match('[^hello]', $str);
preg_match('(^hello)', $str);
preg_match('{^hello}', $str);
// etc

구분 기호가 정규 표현식에 있는 경우 이스케이프해야 합니다.

ereg('^/hello', $str);
preg_match('/^\/hello/', $str);

preg_quote를 사용하면 문자열 내의 모든 딜리미터와 예약된 문자를 쉽게 이스케이프할 수 있습니다.

$expr = preg_quote('/hello', '/');
preg_match('/^'.$expr.'/', $str);

또, PCRE 는 다양한 것에 대해서 수식자를 서포트하고 있습니다.가장 많이 사용되는 것 중 하나는 대소문자를 구분하지 않는 수식어입니다.i, eregi의 대체 수단:

eregi('^hello', 'HELLO');
preg_match('/^hello/i', 'HELLO');

PHP의 PCRE 구문에 대한 완전한 참조와 표현 변환을 돕기 위한 POSIX regex와 PCRE의 차이 목록찾을 수 있습니다.

단, 간단한 예에서는 정규 표현을 사용하지 않습니다.

stripos($str, 'hello world') === 0

preg(PHP 5.3.0 기준)로 대체한 것은 우리에게 유리한 조치였습니다.

Perl 호환 정규 표현 구문을 사용하는 preg_match는 대부분의 경우 ereg를 대체하는 보다 빠른 방법입니다.

ereg 패턴을 preg로 port하기 위한 4가지 주요 사항을 알아야 합니다.

  1. 구분 기호(/):'pattern' => '/pattern/'

  2. 패턴의 일부인 경우 이스케이프 딜리미터:'patt/ern' => '/patt\/ern/'
    다음과 같은 방법으로 프로그래밍 방식으로 구현합니다.
    $old_pattern = '<div>.+</div>';
    $new_pattern = '/' . addcslashes($old_pattern, '/') . '/';

  3. eregi(대문자와 소문자를 구분하지 않는 일치): 'pattern' => '/pattern/i'따라서 대소문자를 구분하기 위해 eregi 함수를 사용하는 경우에는 새로운 패턴('/pattern/')의 끝에 'i'를 추가하기만 하면 됩니다.

  4. ASCII 값:ereg 에서는, 패턴내에서 번호를 사용하는 경우는, 문자의 ASCII 를 참조하고 있는 것으로 간주됩니다.단, preg에서는 숫자는 ASCII 값으로 취급되지 않습니다.따라서 패턴에 ereg 식에 ASCII 값이 포함되어 있는 경우(예를 들어 새 줄, 탭 등), 이를 16진수로 변환하고 \x로 프리픽스를 붙입니다.
    Example: 9(tab) becomes \x9 or alternatively use \t.

PHP 버전 5.3부터는ereg는 권장되지 않습니다.

이동처ereg로.preg_match우리 패턴의 작은 변화일 뿐이야

먼저 코드에 다음과 같은 구분 기호를 추가해야 합니다.

ereg('A-Z0-9a-z', 'string');

로.

preg_match('/A-Z0-9a-z/', 'string');

위해서eregi대소문자를 구분하지 않는 일치, 입력i마지막 구분 기호 뒤에 입력합니다. 예:

eregi('pattern', 'string');

로.

preg_match ('/pattern/i', 'string');

사이에는 더 많은 차이가 있다.ereg()그리고.preg_replace()구문뿐만 아니라

  • 반환값:

    • 오류 발생 시: 둘 다 반환FALSE
    • 일치하지 않는 경우:ereg()돌아온다FALSE,preg_match()돌아온다0
    • 일치시:ereg()문자열 길이를 반환합니다.1,preg_match()항상 반환한다1
  • 일치하는 서브스트링 배열:서브스트링을 전혀 찾을 수 없는 경우((b)...a(b)?)의 대응하는 항목ereg()결과는 다음과 같습니다.FALSE에 있는 동안preg_match()전혀 설정되지 않습니다.

개종할 용기가 없다면ereg()로.preg_match()mb_ereg()를 사용할 수 있습니다.이것은 PHP 7에서 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/6270004/how-can-i-convert-ereg-expressions-to-preg-in-php

반응형