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가지 주요 사항을 알아야 합니다.
구분 기호(/):
'pattern' => '/pattern/'
패턴의 일부인 경우 이스케이프 딜리미터:
'patt/ern' => '/patt\/ern/'
다음과 같은 방법으로 프로그래밍 방식으로 구현합니다.
$old_pattern = '<div>.+</div>';
$new_pattern = '/' . addcslashes($old_pattern, '/') . '/';
eregi(대문자와 소문자를 구분하지 않는 일치):
'pattern' => '/pattern/i'
따라서 대소문자를 구분하기 위해 eregi 함수를 사용하는 경우에는 새로운 패턴('/pattern/')의 끝에 'i'를 추가하기만 하면 됩니다.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
'programing' 카테고리의 다른 글
MariaDB가 오류 [42000][1064]로 단순 테이블 작성을 거부하는 이유는 무엇입니까? (0) | 2022.10.29 |
---|---|
창의 명령줄에서 mysql 데이터 디렉터리를 찾는 방법 (0) | 2022.10.29 |
부울값 스위치/반전 (0) | 2022.10.29 |
SQL 문(Python, MySQL)에서 일부 매개 변수가 사용되지 않았습니다. (0) | 2022.10.29 |
현재 날짜에서 일수를 뺀 Laravel Carbon (0) | 2022.10.29 |