2015-02-03 1 views
-2

php preg_match() 함수에서 슬래시로 묶인 패턴 문자열이 왜 작동합니까? 일부 역사적인 이유 또는 PHP 구문의 일부로 인해 단지 대회입니까?PHP : preg_match()의 패턴 문자열이 슬래시로 묶인 이유는 무엇입니까?

+0

* 문자열은 그것이 당신의/그의 스타일이 문자는 이스케이프해야합니다 그렇다면 문자하지만 아무것도, 정규식에서 개최 안 될 수있다 * 슬래시. . 내 부분에, 나는 @ 또는 파이프를 사용 | – donald123

+0

이것은 PHP가 아닌 정규식 구문의 일부입니다. Perl과 다른 많은 언어들과 동일합니다. [sed와 같은 유틸리티] (http://www.thegeekstuff.com/2009/09/unix-sed-tutorial-replace-text-inside-a-file-using-substitute-command/). – halfer

+0

이 질문은 [PHP preg_ * 함수에 regexp 구분 기호가 필요한 이유는 무엇입니까?] (https://stackoverflow.com/questions/9550899/why-do-the-php-preg-functions-require-regexp-delimiters) –

답변

1

대회 규칙입니다. 많은 언어 (Javascript, Perl, ...)에서 슬래시는 정규식을 정의하는 언어 구조입니다.

PHP에서 패턴은 항상 문자열이지만 두 부분으로 구성됩니다. 표현 자체와 수식어. 슬래시는 표현식을 수정 자와 구분하기 위해 둘러 쌉니다. 영숫자가 아닌 문자는 표현식의 분리 문자로 사용할 수 있습니다. ^, ~, #, @ 또는 기타가 표시 될 수 있습니다.

DELIMITER EXPRESSION DELIMITER MODIFIERS 
    /  .*  /  x 

브래킷도 사용할 수 있습니다. 다른 문자와 달리 표현식에서 같은 방식으로 사용할 수 있습니다.

DELIMITER EXPRESSION DELIMITER MODIFIERS 
    (  .*  )   x 

일치 배열을 반영하기 때문에 구분 기호로 ()을 사용하는 것이 좋습니다.

preg_match('(.(.*))', 'FOO', $matches); 
var_dump($matches); 

출력 : 앞으로 안에

array(2) { 
    [0]=> 
    string(3) "FOO" 
    [1]=> 
    string(2) "OO" 
}