몽상실현개발주의

[생활코딩] 13.2 검색 1 ~ 13.4 검색 3 본문

Language/php

[생활코딩] 13.2 검색 1 ~ 13.4 검색 3

migrationArc 2021. 5. 18. 22:32

[생활코딩] 13.2 검색 1 ~ 13.4 검색 3

생활코딩 php 강좌

13. PHP와 정규표현식

13.2 검색 1

<?php
if (preg_match("/\bweb\b/i", "PHP is the web scripting leanguage of choice.")){
    echo "A match was found.";
}else {
    echo "A match was not found.";
}

if (preg_match("/\bweb\b/i", "PHP is the website scripting leanguage of choice.")){
    echo "A match was found.";
}else {
    echo "A match was not found.";
}
  • "\b" 는 단어의 경계를 의미
    • "\b" 로 감싸진 "web" 은 "web" 이라는 독립된 단어를 의미
    • "website" 는 "web"과 "site"가 결합된 단어이기 때문에 이 조건에 해당X

 

<?php
$subject = 'coding everybody http://opentutorials.org egoing@egoing.com 010-0000-0000';
preg_match('/coding/', $subject, $match);
print_r($match);
?>

// Array ( [0] => coding )
  • preg_match(검색어, 대상, 결과 저장 array)
    • 검색 문자열 "coding" 에 해당하는 문자열을 대상 문자열에서 찾은 뒤, $match 에 Array 형태로 저장함

 

<?php
$subject = 'coding everybody http://opentutorials.org egoing@egoing.com 010-0000-0000';
preg_match('#http://\w+\.\w+#', $subject, $match);
print_r($match);
?>
  
// Array ( [0] => http://opentutorials.org )
  • "#http://\w+.\w+#"
    • "http://----.----" 문자열 정규 표현
    • "\w" : 문자를 의미
    • "+" : 하나 이상
    • "\w+": 하나 이상의 문자열
    • "\ ."' : "." 문자
      • "." 표현은 Any Character 이기 때문에 "\." 표현이 문자 "." 

 

<?php
$subject = 'coding everybody http://opentutorials.org egoing@egoing.com 010-0000-0000';
preg_match('#(http://\w+\.\w+)\s\w+@\w+\.\w+#', $subject, $match);
var_dump($match);
?>
  
// array(2) {
// 	[0]=> string(38) "http://opentutorials.org egoing@egoing"
// 	[1]=> string(24) "http://opentutorials.org"
// }
  • "#(http://\w+.\w+)\s\w+@\w+.\w+#"
    • "http://----.---- ----@----" 문자열 정규 표현
    • "\w" : 문자를 의미
    • "+" : 하나 이상
    • "\w+": 하나 이상의 문자열
    • "\ ." : "." 문자
      • "." 표현은 Any Character 이기 때문에 "\." 표현이 문자 "." 
    • "\s" : space (공백)

 

<?php
$subject = 'coding everybody http://opentutorials.org egoing@egoing.com 010-0000-0000';
preg_match('#(http://\w+\.\w+)\s(\w+@.\w+)#', $subject, $match);
var_dump($match);
?>
  
// array(3) {
// 	[0]=> string(38) "http://opentutorials.org egoing@egoing"
// 	[1]=> string(24) "http://opentutorials.org"
//	[2]=> string(13) "egoing@egoing"
// }
  • "()" 괄호에 의해, 각각의 검색 결과가 subPattern 으로 Array 에 저장 됨
    • Capturing 또는 역참조
    • array[0] : 전체 패턴
    • array[1] : 첫번째 괄호
    • array[2] : 두번째 괄호

 

<?php
$subject = 'coding everybody http://opentutorials.org egoing@egoing.com 010-0000-0000';
preg_match('#(http://\w+\.\w+)\s(\w+@.\w+)#', $subject, $match);
var_dump($match);
echo "<br/>";
echo "homepage: ".$match[1];
echo "<br/>";
echo "email: ".$match[2];
?>
  
// array(3) {
// 	[0]=> string(38) "http://opentutorials.org egoing@egoing"
// 	[1]=> string(24) "http://opentutorials.org"
//	[2]=> string(13) "egoing@egoing"
// }
// homepage: http://opentutorials.org
// email: egoing@egoing
  • 정규 표현식과 괄호를 이용하여 검색 결과를 편하게 사용 가능

 

 

 

13.3 검색 2

<?php
// get host name from URL
preg_match('@^(?:http://)?([^/]+)@i', "http://www.php.net/index.html", $matches);
print_r($matches);
$host = $matches[1];

// Array ( [0] => http://www.php.net [1] => www.php.net )


// get last two segments of host name
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "<br/>domain name is : {$matches[0]}\n";
?>
// domain name is : php.net
  • "@^(?:http://)?([ ^/ ]+)@i"
    • "^" : 행의 시작점
    • "?:" : Capturing 시 해당하는 내용은 포함시키지 않음
    • "?" : 수량자, 0~1 인 경우
    • "@^(?:http://)@" : "http://" 가 없거나 있지만 하나만 존재하는 것으로 시작하면서 "http://" 부분은 포함되지 않는 행의 표현식
    • " [ ^/ ]" : 대괄호 안의 "^"(캐럿)은 not 을 의미
      • "/" 가 아닌 다른 문자
    • " [ ^/ ]+" : "/" 문자를 만나기 전까지의 문자열
    • 결과 : Array ( [0] => http://www.php.net [1] => www.php.net )
  • "/[ ^. ]+ \ .[ ^. ]+$/"
    • "[ ^. ]+ " : "." 이 아닌 문자가 1개 이상
    • "\ ." : "." 을 문자로 처리
      • "." 은 AnyCharacter 이기 때문에 "\ ." 로 "." 을 문자로 처리
    • "$" : 문자열의 끝, 검색의 기준이 문자열의 끝으로 생각해야함
    • 결과 : php.net

 

 

 

13.4 검색 3

<?php
$str = 'foobar: 2008';

preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches);

print_r($matches);
?>
  
// Array (
// 	[0] => foobar: 2008
// 	[name] => foobar
// 	[1] => foobar
// 	[digit] => 2008
// 	[2] => 2008
// 	)
  • "/(?P<name>\w+): (?P<digit>\d+)/"
    • "\w+" : 문자열
    • "?P<name>\w+" : <name> 이라는 key 값으로 문자열을 저장
    • ":" : ":" 문자
    • "\d+" : digit 문자열
    • "?P<digit>\d+" : <digit> 이라는 key 값으로 digit 문자열을 저장
    • 결과 : Array ( [0] => foobar: 2008 [name] => foobar [1] => foobar [digit] => 2008 [2] => 2008 )
  • sub pattern 을 index 뿐만 아니라, 연관배열의 key 값으로 sub pattern 의 이름을 지정하여 저장 가능

 

 

 


이 글의 모든 사진과 내용의 출처는 생활코딩에 있음을 알려드립니다.

http://www.inflearn.com/course/%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A9-php-%EA%B0%95%EC%A2%8C/lecture/230?tab=note

 

생활코딩 - PHP 기본 A 부터 Z 까지 - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

 

Comments