PHP에서 ereg 표현식을 preg로 변환하려면 어떻게해야합니까?
이후 POSIX 정규 표현식 (EREG)는 PHP 5.3.0부터 사용되지 않습니다, 나는에 이전 식을 변환하는 쉬운 방법을 알고 싶습니다 PCRE (펄 호환 정규 표현식) (레그)를 .
예를 들어 다음과 같은 정규 표현식이 있습니다.
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 정규식과 PCRE 사이를.
그러나 간단한 예에서는 정규식을 사용하지 않습니다.
stripos($str, 'hello world') === 0
preg (PHP 5.3.0 현재)로 Ereg를 대체하는 것이 우리에게 유리한 조치였습니다.
Perl 호환 정규 표현식 구문을 사용하는 preg_match는 종종 ereg의 빠른 대안입니다.
ereg 패턴을 preg로 포팅하기위한 4 가지 주요 사항을 알아야합니다.
구분 기호 추가 (/) :
'pattern' => '/pattern/'
패턴의 일부인 경우 분리 문자를 이스케이프
'patt/ern' => '/patt\/ern/'
하십시오. 프로그래밍 방식으로 다음과 같은 방법으로 달성하십시오.
$old_pattern = '<div>.+</div>';
$new_pattern = '/' . addcslashes($old_pattern, '/') . '/';
eregi (대 / 소문자 구분 안 함) : 대 / 소문자 구분없이
'pattern' => '/pattern/i'
eregi 함수를 사용하는 경우 새 패턴 끝에 'i'를 추가하면됩니다 ( '/ pattern /').ASCII 값 : ereg에서 패턴에 숫자를 사용하면 문자의 ASCII를 참조한다고 가정합니다. 그러나 preg에서 숫자는 ASCII 값으로 취급되지 않습니다. 따라서 패턴에 ereg 표현식에 ASCII 값이 포함 된 경우 (예 : 줄 바꾸기, 탭 등) 16 진수로 변환하고 접두사 \ x를 붙입니다.
Example: 9(tab) becomes \x9 or alternatively use \t.
구문 ereg()
과 preg_replace()
구문 사이에는 더 많은 차이점이 있습니다 .
반환 값 :
- 오류시 : 둘 다 반환
FALSE
- 일치하지 않는 경우 :
ereg()
리턴FALSE
,preg_match()
리턴0
- 경기에 :
ereg()
문자열 길이를 반환하거나1
,preg_match()
항상 반환1
- 오류시 : 둘 다 반환
일치하는 부분 문자열의 결과 배열 : 일부 부분 문자열이 전혀 발견되지 않으면 (
(b)
in...a(b)?
)ereg()
결과의 해당 항목은FALSE
이지만 결과preg_match()
는 전혀 설정되지 않습니다.
하나는 변환하는 용감한 정도가 아닌 경우 자신이 ereg()
하는 preg_match()
, 그 또는 그녀가 사용할 수 mb_ereg () PHP 7에서 계속 사용할 수있는.
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');
참고 URL : https://stackoverflow.com/questions/6270004/how-can-i-convert-ereg-expressions-to-preg-in-php
'IT' 카테고리의 다른 글
SQL WHERE 절이 단락 되었습니까? (0) | 2020.06.27 |
---|---|
PHP에서 주석을 달기 위해 해시 기호 (#)를 사용할 수 있습니까? (0) | 2020.06.27 |
자바`최종`방법 : 그것은 무엇을 약속합니까? (0) | 2020.06.27 |
가져 오기 / 의존적 사용시기에 대한 더 나은 설명 (0) | 2020.06.27 |
여러 스레드에서 java.util.HashMap의 값을 얻는 것이 안전합니까? (0) | 2020.06.27 |