>  기사  >  백엔드 개발  >  PHP 정규식에서 일반적으로 사용되는 함수에 대한 자세한 설명

PHP 정규식에서 일반적으로 사용되는 함수에 대한 자세한 설명

黄舟
黄舟원래의
2017-11-11 13:16:481862검색

이전 글에서는 php 정규식의 사용법과 시작하는 방법을 배웠습니다. 오늘은 php 정규식의 공통 기능을 소개하는 데 집중하겠습니다. 이 둘을 조합하면 완벽하게 사용할 수 있습니다! !

1. preg_match()

함수 프로토타입:

int preg_match (string $pattern, string $content [, array $matches])

preg_match() 함수는 $content 문자열에서 $pattern에 지정된 정규 표현식과 일치하는 콘텐츠를 검색합니다. $matches가 제공되면 일치하는 결과가 그 안에 배치됩니다. $matches[0]에는 전체 패턴과 일치하는 텍스트가 포함되고, $matches[1]에는 괄호로 묶인 패턴 요소의 첫 번째 캡처된 일치 항목이 포함됩니다. 이 함수는 한 번의 일치만 수행하고 최종적으로 일치하는 결과의 수는 0 또는 1을 반환합니다. Listing 6.1은 preg_match() 함수에 대한 코드 예제를 보여줍니다.
코드 6.1 날짜 및 시간 매칭
코드는 다음과 같습니다.

<?php 
//需要匹配的字符串。date函数返回当前时间 
$content = "Current date and time is ".date("Y-m-d h:i a").", we are learning PHP together."; 
//使用通常的方法匹配时间 
if (preg_match ("//d{4}-/d{2}-/d{2} /d{2}:/d{2} [ap]m/", $content, $m)) 
{ 
echo "匹配的时间是:" .$m[0]. "/n"; 
} 
//由于时间的模式明显,也可以简单的匹配 
if (preg_match ("/([/d-]{10}) ([/d:]{5} [ap]m)/", $content, $m)) 
{ 
echo "当前日期是:" .$m[1]. "/n"; 
echo "当前时间是:" .$m[2]. "/n"; 
} 
?>

간단한 동적 텍스트 문자열 매칭 예시입니다. 현재 시스템 시간이 "2006년 8월 17일 13시 25분"이라고 가정하면 다음과 같은 내용이 출력됩니다.
매칭 시간 : 2006-08-17 01:25 pm
현재 날짜 : 2006-08-17
현재 시간 : 01:25 pm

2. ereg() 및 eregi()

ereg()는 POSIX 확장 라이브러리의 정규식에 대한 일치 함수입니다. eregi()는 ereg() 함수의 대소문자를 무시하는 버전입니다. 둘 다 preg_match와 유사한 함수를 가지고 있지만 이 함수는 일치가 성공했는지 여부를 나타내는 부울 값을 반환합니다. POSIX 확장 라이브러리 함수의 첫 번째 매개변수는 정규식 문자열을 허용합니다. 즉, 구분 기호가 필요하지 않습니다. 예를 들어, 목록 6.2는 파일 이름의 보안을 확인하는 방법입니다.
Code 6.2 파일 이름 보안 검사
코드는 다음과 같습니다.


<?php 
$username = $_SERVER[&#39;REMOTE_USER&#39;]; 
$filename = $_GET[&#39;file&#39;]; 
//对文件名进行过滤,以保证系统安全 
if (!ereg(&#39;^[^./][^/]*$&#39;, $userfile)) 
{ 
die(&#39;这不是一个非法的文件名!&#39;); 
} 
//对用户名进行过滤 
if (!ereg(&#39;^[^./][^/]*$&#39;, $username)) 
{ 
die(&#39;这不是一个无效的用户名&#39;); 
} 
//通过安全过滤,拼合文件路径 
$thefile = "/home/$username/$filename"; 
?>


일반적으로 ereg() 또는 eregi()를 사용하는 것보다 Perl 호환 정규식 일치 함수 perg_match()를 사용하는 것이 더 좋습니다. ) 더 빠르게. 문자열에 특정 하위 문자열이 포함되어 있는지 확인하려면 strstr() 또는 strpos() 함수를 사용하는 것이 좋습니다.

정규식 대체

1. ereg_replace() 및 eregi_replace()

함수 프로토타입:

string ereg_replace (string $pattern, string $replacement, string $string) 
string eregi_replace (string $pattern, string $replacement, string $string)

ereg_replace()는 $string에서 패턴 문자열 $pattern을 검색하고 일치하는 결과를 $replacement로 바꿉니다. $pattern에 패턴 단위(또는 하위 패턴)가 포함된 경우 "/1" 또는 "$1"과 같은 $replacement의 위치는 이러한 하위 패턴과 일치하는 콘텐츠로 대체됩니다. 그리고 "/0" 또는 "$0"은 일치하는 문자열 전체의 내용을 나타냅니다. 백슬래시는 큰따옴표 안의 이스케이프 문자로 사용되므로 "//0" 및 "//1" 형식을 사용해야 합니다.
eregi_replace()와 ereg_replace()는 대소문자를 무시한다는 점을 제외하면 동일한 기능을 갖습니다. 코드 6.6은 이 함수의 적용 예입니다. 이 코드는 프로그램 소스 코드에서 간단한 정리 작업을 수행하는 방법을 보여줍니다.
코드 6.6 소스 코드 정리
코드는 다음과 같습니다.

<?php 
$lines = file(&#39;source.php&#39;); //将文件读入数组中 
for($i=0; $i<count($lines); $i++) 
{ 
//将行末以“//”或“#”开头的注释去掉 
$lines[$i] = eregi_replace("(////|#).*$", "", $lines[$i]); 
//将行末的空白消除 
$lines[$i] = eregi_replace("[ /n/r/t/v/f]*$", "/r/n", $lines[$i]); 
} 
//整理后输出到页面 
echo htmlspecialchars(join("",$lines)); 
?>


2. preg_replace()

함수 프로토타입:

mixed preg_replace (mixed $pattern, mixed $replacement, mixed $subject [, int $limit])

preg_replace는 ereg_replace보다 더 강력합니다. 처음 세 매개변수는 모두 배열을 사용할 수 있습니다. 네 번째 매개변수 $limit는 교체 횟수를 설정할 수 있으며 기본값은 모두 교체입니다. 코드 6.7은 어레이 교체의 적용 예입니다.
코드 6.7 배열 교체
코드는 다음과 같습니다.


<?php 
//字符串 
$string = "Name: {Name}<br>/nEmail: {Email}<br>/nAddress: {Address}<br>/n"; 
//模式 
$patterns =array( 
"/{Address}/", 
"/{Name}/", 
"/{Email}/" 
); 
//替换字串 
$replacements = array ( 
"No.5, Wilson St., New York, U.S.A", 
"Thomas Ching", 
"tom@emailaddress.com", 
); 
//输出模式替换结果 
print preg_replace($patterns, $replacements, $string); 
?>

출력 결과는 다음과 같습니다.

Name: Thomas Ching", 
Email: tom@emailaddress.com 
Address: No.5, Wilson St., New York, U.S.A

preg_replace의 정규 표현식에 패턴 수정자 "e"를 사용할 수 있습니다. 그 기능은 일치하는 결과를 표현식으로 사용하는 것이며 다시 연산할 수 있습니다. 예:
코드는 다음과 같습니다.

<?php 
$html_body = “<HTML><Body><H1>TEST</H1>My Picture<Img src=”my.gif”></Body></HTML>”; 
//输出结果中HTML标签将全部为小写字母 
echo preg_replace ( 
"/(<//?)(/w+)([^>]*>)/e", 
"&#39;//1&#39;.strtolower(&#39;//2&#39;).&#39;//3&#39;", //此处的模式变量//2将被strtolower转换为小写字符 
$html_body); 
?>

요약:

preg_replace 함수는 Perl 호환 정규식 구문을 사용하며 일반적으로 ereg_replace보다 더 빠른 대안입니다. 문자열만 간단히 바꾸려면 str_replace 함수를 사용하면 됩니다.

관련 권장 사항:

PHP 정규 표현식의 preg_match_all 함수에 대한 자세한 설명


PHP 정규 표현식의 preg_match 함수에 대한 자세한 설명


이메일 주소 확인을 위한 PHP 정규 표현식 사례 연구


PHP 정규 표현식 분석 예


php Regular 표현식에 대한 자세한 소개

위 내용은 PHP 정규식에서 일반적으로 사용되는 함수에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.