원문: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4101636
정규식을 사용하면 절반의 노력으로 두 배의 결과를 얻을 수 있습니다. 다음은 PHP정규식에 대한 구문 요약과 자세한 소개입니다. 그리고 참고하세요. 먼저 두 개의 특수 문자인 '^'와 '$'를 살펴보겠습니다. 이들은 각각 문자열의 시작과 끝을 일치시키는 데 사용됩니다. "^The": "The"로 시작하는 문자열과 일치합니다. "of 절망$": "of 절망"으로 끝나는 문자열과 일치합니다. 🎜>"^abc$": abc로 시작하고 abc로 끝나는 문자열과 일치합니다. 실제로 abc만 일치합니다. "notice": 통지가 포함된 문자열과 일치합니다. 우리가 언급한 두 문자(마지막 예)를 사용하지 않으면, 즉 패턴(정규 표현식
)이 테스트 중인 문자열에 잠그지 않는 어디든 나타날 수 있음을 알 수 있습니다. 양쪽에
각각 문자가 나타날 수 있는 횟수나 순서를 나타내는 데 사용되는 '*', '+' 및 '?' 문자도 여러 개 있습니다. 의미: "0개 이상", "1개 이상", "0개 또는 1개" 다음은 몇 가지 예입니다. "ab*": 문자열 a 및 0과 일치하거나 구성된 문자열 더 많은 b("a", "ab", "abbb" 등) "ab+": 위와 동일하지만 적어도 하나의 b가 있습니다("ab ", "abbb ", etc.); "ab?": 0 또는 1개와 일치 b; "a?b+$": 1개와 일치 또는 0으로 끝나는 문자열 a + 하나 이상의 b " ab{2}"와 같이 중괄호 안에 표시되는 문자 수를 제한할 수도 있습니다. 그 뒤에 두 개의 b(하나도 적지 않음)가 옵니다. ("abb"![PHP <br>정규 표현식<span>구문 요약](http://image.codes51.com/Article/image/20151204/20151204143322_8103.gif)
;
"ab{3,5}": 2-5 b("abbb", "abbbb" 또는 "abbbbb"![PHP<br>정규 표현식<span>구문 요약](http://image.%20codes51.com/Article/image/20151204/20151204143322_9509.gif)
.
![PHP 정규식 구문 요약해야 합니다. 또한 항상 지정해야 합니다(예:](http://image.codes51.com/Article/image/20151204/20151204143322_9509.gif)
![PHP<br>정규 표현식<span>구문 요약](http:%20//image.codes51.com/Article/image/20151204/20151204143323_0447%20.gif)
. 마찬가지로 다음 사항에 유의해야 합니다.
'*', '+' 및 '?'는 각각 다음 세 가지 범위 주석 "{0,}", "{1,}" 및 "{0,1}"과 동일합니다.
이제 특정 수의 문자를 괄호 안에 넣으세요. 예: "a(bc)*": a 다음에 0 또는 "bc" "가 옵니다. "a(bc){1,5}": 1~5 "bc." 다음과 같은 문자 '│'도 있습니다. OR 연산: "hi│hello": "hi" 또는 "hello"가 포함된 문자열과 일치합니다. "(b│cd)ef": 다음이 포함된 문자열과 일치합니다. "bef" 또는 "cdef"; "(a│b)*c": 여러(0 포함) a 또는 b와 일치하고 그 뒤에 c 문자열이 옵니다. ; 점('.')은 모든 단일 문자를 나타낼 수 있습니다. "a .[0-9]": a 뒤에 문자가 옵니다. 숫자(이러한 문자열을 포함하는 문자열은 일치하며 앞으로는 이 괄호가 생략됩니다) "^.{3 }$": 으로 끝납니다.
대괄호로 묶인 내용은 단일 문자에만 일치합니다. "[ab]": 단일 a 또는 b와 일치합니다("a│b"와 동일). >"[a-d]": 'a'에서 'd'까지의 단일 문자와 일치합니다("a│b│c│d"와 동일 "[abcd]"는 동일한 효과를 갖습니다). >
"^[a-zA-Z]": 문자로 시작하는 문자열과 일치
"[0- 9]%": x%를 포함하는 문자열과 일치
", [a-zA-Z0-9]$": 뒤에 숫자나 문자가 오는 쉼표로 끝나는 문자열과 일치합니다.
대괄호 안에 원하지 않는 문자를 나열할 수도 있습니다. 괄호 시작 부분으로 '^'를 사용하면 됩니다(예: "%[^a-zA-Z] %"는 내부에 문자가 아닌 2개의 퍼센트 기호가 포함된 문자열과 일치합니다). >
설명을 하자면 "^.[$()│*+?{/"에는 특수 문자가 있는데, 문자를 의미할 때는 앞에 ''를 붙여야 하고, php3에서는 피해야 합니다. 패턴 시작 부분에 /를 사용합니다. 예를 들어 정규 표현식
"(/$│? [0-9]+"은 다음과 같이 호출해야 합니다. ereg("(//$│?[0- 9]+", $str) (php4가 같은지 모르겠습니다)
대괄호 안의 문자는 이 규칙의 예외입니다. 대괄호 안의 모든 문자는
('')를 포함한 특수 문자는 특수 속성을 잃습니다(예: "[*/+? {}.]"는 이러한 문자를 포함하는 문자열과 일치합니다). 또한 regx 매뉴얼에 따르면 " 목록에 ']'가 포함된 경우 목록의 첫 번째 문자로 만드는 것이 가장 좋습니다(뒤에 '^'가 올 수도 있음). '-'가 포함된 경우 맨 앞이나 끝에 두는 것이 가장 좋습니다.
또는 범위의 두 번째 끝점(예: [a-d-0-9] 중간에 '-'이 있으면 가능합니다. 완전성을 위해 조합 시퀀스, 문자 클래스 및 그러나 나는 이러한 측면에 대해 너무 자세히 설명하고 싶지 않으며 다음 기사에서 다룰 필요가 없습니다. 정규식 매뉴얼 페이지에서 더 많은 정보를 얻을 수 있습니다. 🎜>
금액 입력과 일치하는 패턴 작성 방법 자, 이제 배운 내용을 사용하여 유용한 작업을 수행해 보겠습니다. 입력 정보는 돈을 나타내는 숫자입니다.금액을 나타내는 방법에는 "10000.00"과 "10,000.00", 또는 소수 부분이 없는 "10000"과 "10,000"의 네 가지 방법이 있다고 생각합니다. 이제 이 일치 패턴을 구축해 보겠습니다.
^[1-9][0-9]*$ 이는 모든 변수가 0이 아닌 숫자로 시작해야 함을 의미합니다. 그러나 이는 또한 단일 "0"이 전달될 수 없음을 의미합니다. 테스트는 다음과 같습니다. ^(0│[1-9][0-9]*)$ "0만 있고 그렇지 않은 경우 0으로 시작 숫자를 일치시키기 위해 숫자 앞에 음수 기호를 허용할 수도 있습니다: ^(0│-?[1-9][0-9]*)$ 이것은 "0 또는 앞에 음수 기호가 있을 수 있는 0으로 시작하는 숫자입니다." 좋습니다. 이제 덜 엄격하게 0으로 시작하도록 하겠습니다. 이제 음수 기호를 삭제하겠습니다. 왜냐하면 동전을 나타낼 때 사용할 필요가 없기 때문입니다. 이제 소수 부분과 일치하도록 패턴을 지정합니다: ^[0-9]+(/.[0-9]+) ?$ 이는 일치하는 문자열이 최소한 아랍어 숫자로 시작해야 함을 의미합니다. 그러나 위 패턴에서는 "10"이 일치하지 않으며 "10"과 "10.2"만 일치합니다. (이유를 아시나요?) ^[0-9]+(/.[0-9]{2})?$ 소수점 이후 소수점 이하 두 자리가 있어야 합니다. 이것이 너무 가혹하다고 생각되면 다음과 같이 변경할 수 있습니다: ^[0-9]+(/.[0-9]{1 ,2})?$ 이제 가독성을 위해 쉼표(3자리마다)를 추가하므로 다음과 같이 표현할 수 있습니다. ^[0-9]{1,3}(,[0-9]{3})*(/.[0-9]{1,2})?$ 빈 문자열을 입력할 수 있도록 하려면 곱셈 기호 '*'로 대체할 수 있는 더하기 기호 '+'를 잊지 마십시오(왜?). 백슬래시 '/'를 잊지 마세요. PHP 문자열에서 오류가 발생할 수 있습니다(매우 일반적인 오류). 이제 문자열을 확인할 수 있으므로 이제 모든 쉼표 str_replace(",", "", $money)를 제거하고 유형을 변경합니다. 이를 double로 처리하면 이메일 확인을 위한 정규식을 구성할 수 있습니다. 자, 계속하겠습니다. 이메일 주소를 확인하는 방법에 대해 토론하세요. 완전한 이메일 주소에는 POP3 사용자 이름('@' 왼쪽의 모든 항목), '@', 서버 이름(나머지는 크기 포함 가능), 문자 쓰기 등 세 부분이 있습니다. 아라비아 숫자, 마침표('.'), 빼기 기호('-') 및 밑줄('_')도 물론 밑줄을 제외하고는 이 규칙을 따릅니다. , 사용자 이름은 마침표로 시작하고 끝날 수 없습니다. 또한 두 개의 연속 마침표 사이에 최소 한 문자가 있을 수 없습니다. 이제 사용자 이름에 대해 일치하는 패턴을 작성하는 방법을 살펴보겠습니다. ^[_a-zA-Z0-9-]+$
마침표의 존재는 아직 허용되지 않습니다.
을 추가합니다. ^[_a-zA-Z0-9-]+(/.[_a-zA-Z0-9-]+)*$
위의 의미는 다음과 같습니다. "적어도 하나의 정규 문자(. 예기치 않은 문자 제외) 뒤에 점으로 시작하는 0개 이상의 문자열이 옵니다."
조금 단순화하기 위해 ereg().eregi( ) 대신 eregi()를 사용할 수 있습니다. 대소문자를 구분하지 않으므로 "a-z" 및 "A-Z" 두 범위를 지정할 필요가 없습니다. 단 하나만 지정하면 됩니다.
^[_a-z0-9-]+ (/.[_a -z0-9-]+)*$
뒤의 서버 이름은 동일하지만 밑줄이 제거되었습니다.
^[a-z0 -9- ]+(/.[a-z0-9-]+)*$
이제 "@"를 사용하여 두 부분을 연결하면 됩니다.
^ [_a-z0-9-]+(/.[_a-z0-9-]+)*@[a-z0-9-]+(/.[a-z0-9-]+)* $
이메일 인증 매칭 모드는
eregi('^[_a-z0-9-]+(/.[_a -z0)만 호출하면 됩니다. -9-]+)*@[a-z0-9-]+(/.[a-z0-9-]+)*$ ',$eamil)
여부 확인 email
정규 표현식의 다른 용도 추출 문자열 ereg() 및 eregi()에는 사용자가
정규식을 통해 문자열의 일부를 추출할 수 있는 기능입니다(구체적인 사용법은 매뉴얼을 참조하세요). 예를 들어, 아래의 경로/URL에서 파일 이름을 추출하려고 합니다. 다음이 필요합니다:
ereg("([^///]*)$", $pathOrUrl, $regs) echo $regs[1 ];
고급 대체
ereg_replace() 및 eregi_replace()도 매우 유용합니다. 분리된 모든 음수 기호를 쉼표로 바꾸려는 경우:
ereg_replace("[ /n/r/t]+", ",", Trim($str))
PHP는 웹 배경에서 널리 사용됩니다. CGI 개발은 일반적으로 다음과 같은 결과를 낳습니다. 그러나 사용자가 입력한 데이터가 올바르지 않으면 문제가 발생합니다. 예를 들어 누군가의 생일이 "2월 30일"입니다! 그렇다면 여름방학이 맞는지 어떻게 확인해야 할까요? PHP에
정규식 지원이 추가되어 매우 편리하게 데이터 매칭을 수행할 수 있습니다.
2 정규식이란:
간단히 말하면 정규식은 사용할 수 있는 표현의 일종입니다. 패턴 일치 및 교체를 위한 강력한 도구입니다.
정규식
의 흔적은 Perl이나 PHP 스크립트 언어 등 UNIX/LINUX 시스템 기반의 거의 모든 소프트웨어 도구에서 찾을 수 있습니다. 또한 클라이언트 측 스크립트 언어인 JavaScript도 정규식을 지원합니다. 이제 정규식은 다양한 기술 인력이 사용하는 공통 개념이자 도구가 되었습니다. 한 Linux 웹사이트에는 다음과 같은 내용이 있습니다. "Linux 애호가에게 가장 좋아하는 것이 무엇인지 묻는다면 그는 아마도 정규 표현식이라고 대답할 것입니다. 가장 좋아하는 것은 무엇입니까? 지루한 설치 및 구성 외에도 그는 확실히
정규 표현식
이라고 말할 것입니다." 위에서 언급한 것처럼 정규식이 굉장히 복잡하고 무섭게 보이지만, 지난 홈페이지 구축
http://www.geilijz.com
내가 말씀드리고 싶은 것은 대부분의 PHP 초보자는 이것을 건너뛰고 아래에서 계속 배울 것이라는 것입니다. 그러나 PHP의 정규식은 패턴 일치를 사용하여 일치 조건을 찾을 수 없다는 것이 아쉽습니다. 문자열과 같은 강력한 기능을 배우고, 문자열이 조건을 충족하는지 판단하거나 지정된 문자열을 사용하여 정규화된 문자열을 대체합니다... 3 정규 표현식 공식의 기본 구문 : 정규 표현식 은 구분 기호, 표현식 및 수정자 구분 기호는 다음을 제외한 모든 문자일 수 있습니다.
특수 문자 (예: "/ !" 등). 일반적으로 사용되는 구분 기호는 "/"입니다. 표현식은 일부 특수 문자 로 구성됩니다. 🎜>아래 참조) 및 "[a-z0-9_-]+@[a-z0-9_-.]+"와 같은 특수하지 않은 문자열은 간단한 전자 이메일 문자열과 일치할 수 있습니다. 다음은 완전한 정규식의 예입니다. /hello.+?hello /is 위의 정규 표현식
"/"은 구분 기호이고, 두 "/" 사이의 문자가 표현식이고, 두 번째 "/" 뒤의 문자가 표현식에 포함된 경우 문자열 "is"가 수정자입니다. 구분 기호로 사용하려면 "/hello.+?//hello/is"와 같은 이스케이프 기호를 사용해야 합니다. 이스케이프 기호는
로도 사용할 수 있습니다. 특수 문자 . 문자로 구성된 모든 특수 문자 는 "/"로 이스케이프되어야 합니다. 예를 들어 "/d"는 모든 숫자를 나타냅니다.
4 정규식특수문자:
정규식 특수문자는 메타문자, 위치 지정 문자 등으로 구분됩니다.
메타 문자는 정규 표현식에서 특별한 의미를 갖는 문자 유형으로, 일치하는 문자열에서 선행 문자(즉, 메타 문자 앞의 문자)가 나타나는 방식을 설명하는 데 사용됩니다. 메타 문자 자체는 단일 문자이지만 서로 다르거나 동일한 메타 문자를 결합하여 큰 메타 문자를 형성할 수 있습니다. 중괄호: 중괄호는 개체를 정확하게 지정하는 데 사용됩니다. 일치하는 메타 문자의 발생 횟수(예: "/pre{1,5}/")는 일치를 나타냅니다. 객체는 "pre", "pree", "preeeee"일 수 있으며 1~5 "e"의 문자열이 나타납니다. "pr" 뒤 또는 "/pre{,5}/"는 5번 사이에서 0 정도를 나타냅니다.
더하기 기호: "+" 문자는 한 번 이상 나타나는 메타 문자 앞의 문자를 일치시키는 데 사용됩니다. 예를 들어, "/ac+/"는 일치하는 개체가 "a" 뒤에 하나 이상의 "c"가 나타나는 "act", "account", "acccc" 등과 같은 문자열일 수 있음을 의미합니다. "+"는 "{1,}"과 동일합니다. Asterix: "*" 문자는 0번 이상 나타나는 메타 문자 앞의 문자를 일치시키는 데 사용됩니다. 예를 들어, "/ac*/"는 일치하는 개체가 "app", "acp", "accp" 및 "a" 뒤에 나타나는 0개 이상의 "c"가 있는 기타 문자열일 수 있음을 의미합니다. "*"는 "{0,}"과 동일합니다. 물음표: "?" 문자는 메타 문자 앞의 문자가 0개 또는 1개 발생하는 것과 일치하는 데 사용됩니다. 예를 들어, "/ac?/"는 일치하는 개체가 "a", "acp", "acwp"일 수 있으며 "a" 뒤에 0개 또는 1개의 "c" 문자열이 나타날 수 있음을 의미합니다. "?" 역시 정규식
, 즉 "탐욕 모드"에서 매우 중요한 역할을 합니다.
두 가지 매우 중요한
특수문자가 있는데 "[ ]"입니다. "[]"에 나타나는 문자와 일치할 수 있습니다. 예를 들어, 위의 표현식이 "/[a-z]/"로 변경되면 "/[az]/"는 단일 문자 "a"와 일치할 수 있습니다. "a", "b" 등과 같은 단일 소문자를 일치시킬 수 있습니다.
"[]"에 "^"가 나타나면 "/[^a-z]/"와 같이 "[]"에 나타나는 문자와 이 표현이 일치하지 않는다는 의미입니다. 어떤 소문자라도! 그리고 정규식 은 "[]"에 대해 여러 가지 기본값을 제공합니다. [:alpha:]: 모든 문자와 일치 [ :alnum:]: 모든 문자 및 숫자와 일치 [:digit:]: 모든 숫자와 일치 [:space:]: 공백 문자와 일치 [:upper:]: 모든 대문자와 일치 [:lower:]: 모든 소문자와 일치 [:punct:]: 일치 구두점 [
digit:]: 모든 16진수와 일치 또한 다음 특수 문자는 이스케이프됩니다. 이스케이프 기호 "/"는 다음과 같습니다. s: 단일 공백 문자와 일치합니다. S: 단일 공백 문자를 제외한 모든 문자와 일치합니다. d: 0부터 9까지의 숫자를 일치시키는 데 사용되며 "/[0-9]/"와 동일합니다. w: 문자, 숫자 또는 밑줄 문자를 일치시키는 데 사용되며 "/[a-zA-Z0-9_]/"에 해당합니다. W: w와 일치하지 않는 모든 문자를 일치시키는 데 사용되며 "/[^a-zA-Z0-9_]/"와 동일합니다. D: 십진수가 아닌 숫자와 일치하는 데 사용됩니다. .: 개행 문자를 제외한 모든 문자를 일치시키는 데 사용됩니다. 수정자 "s"로 수정하면 "."은 모든 문자를 나타낼 수 있습니다. 위의 특수문자 를 이용하면 복잡한 패턴 매칭을 쉽게 표현할 수 있습니다. 예를 들어 "//d0000/"은 위의 정규식을 사용하여 10,000보다 크고 100,000보다 작은 정수 문자열을 일치시킬 수 있습니다. 위치 지정 문자: 위치 지정 문자는 정규 표현식에서 매우 중요한 문자 유형 중 하나입니다. 주요 기능은 문자를 설명하는 것입니다. 일치하는 개체 내의 위치. ^: 일치하는 패턴이 일치하는 개체의 시작 부분에 나타남을 나타냅니다("[]"와 다름). $: 일치하는 패턴이 다음 위치에 나타남을 나타냅니다. 일치하는 객체의 시작 의 끝은 공백입니다. 일치하는 패턴이 시작과 끝 사이의 두 경계 중 하나에 나타남을 나타냅니다. "/^he/": hello, height 등과 같은 문자로 시작하는 "he" 문자열과 일치할 수 있습니다. "/he$/": "he"로 끝나는 문자열과 일치할 수 있습니다. " 문자, 즉 she 등; "/ he/": 공백으로 시작하고 ^와 동일한 효과를 가지며 he로 시작하는 문자열과 일치합니다. "/he /": 공백으로 끝나며 $와 동일한 효과를 가집니다. he로 끝나는 문자열과 일치합니다. "/^he$/": 일치하는 문자열만 나타냅니다. 문자열 "그". 괄호: 정규식
사용자 일치 외에도 대괄호 "()"를 사용하여 필요한 정보를 기록하고 저장할 수도 있습니다. it , 다음 표현식으로 읽어야 합니다. 예:
/^([a-zA-Z0-9_-]+)@([a-zA-Z0-9_-]+)(.[a-zA-Z0- 9_ -])$/ 은 이메일 주소를 기록하는 사용자 이름과 해당 이메일 주소의 서버 주소(service@geilijz.com
형식) 또는 그런 식), 기록된 문자열을 읽으려면 "이스케이프 문자 + 기록된 순서"를 사용하여 읽으면 됩니다. 예를 들어, "/1"은 첫 번째 "[a-zA-Z0-9_-]+"와 동일하고, "/2"는 두 번째 ([a-zA-Z0-9_-]+)와 동일합니다. "/ 3"은 세 번째 항목(.[a-zA-Z0-9_-])입니다. 하지만 PHP에서 "/"는 이스케이프 처리가 필요한 특수 문자이므로 PHP 표현식에서는 ""를 "//1"로 작성해야 합니다.
기타 특수 기호: "|": or 기호 "|"는 PHP의 or와 동일하지만 대신에 "|"가 하나만 있습니다. PHP A "||"의 두 개 중! 이는 특정 문자 또는 다른 문자열일 수 있음을 의미합니다. 예를 들어 "/abcd|dcba/"는 "abcd" 또는 "dcba"와 일치할 수 있습니다. 5 탐욕 모드: 앞에서 언급한 메타 문자 "?"도 중요한 역할을 합니다. 즉, "탐욕 모드", "탐욕"이란 무엇입니까? "모드"는 어떻습니까? 예를 들어 문자 "a"로 시작하고 문자 "b"로 끝나는 문자열을 일치시키려고 하는데 일치해야 하는 문자열의 "a" 뒤에 "b"가 많이 포함되어 있습니다. ", 예를 들어 "a bbbbbbbbbbbbbbbbb"인 경우 정규 표현식
이 첫 번째 "b"와 일치합니까 아니면 마지막 "b"와 일치합니까? 그리디 모드를 사용하면 마지막 "b"가 일치하고, 그렇지 않으면 첫 번째 "b"만 일치됩니다.
그리디 모드를 사용한 표현은 다음과 같습니다. /a.+?b/ /a.+b/U greedy 모드를 사용하지 않는 방법은 다음과 같습니다. /a.+b/ 위에서 수식어 U가 사용되었습니다. 아래를 참조하세요. 자세한 부분은. 6개의 수정자: 정규 표현식의 수정자는 정규 표현식의 여러 특성을 변경하여 정규 표현식 을 만들 수 있습니다. 귀하의 요구 사항에 더 적합합니다(참고: 수정자는 대/소문자를 구분하므로 "e"는 "E"와 같지 않음). 정규식 의 수식어는 다음과 같습니다. i: 수식어에 "i"를 추가하면 정규식은 대소문자 구분을 취소합니다. 즉, " a "는 "A"와 동일합니다. m: 기본 일반 시작 "^"과 끝 "$"는 일반 문자열에만 적용됩니다. "m"이 수정자에 추가되면 시작과 끝은 문자열의 각 부분을 참조합니다. 한 줄: 각 줄의 시작은 "^"이고 끝은 "$"입니다. s: "s"가 수식어에 추가되면 기본 "."은 개행 문자를 제외한 모든 문자가 개행 문자를 포함한 모든 문자가 됨을 의미합니다! x: 이 수정자를 추가하면 표현식의 공백 문자가 이스케이프되지 않는 한 무시됩니다. e: 이 수정자는 교체에만 유용합니다. 즉, 교체 시 PHP 코드로 사용된다는 의미입니다. A: 이 수정자를 사용하는 경우 표현식은 일치하는 문자열의 시작이어야 합니다. 예를 들어 "/a/A"는 "abcd"와 일치합니다. E: "m"과 달리 이 수정자를 사용하면 "$"는 개행 문자 앞이 아닌 문자열의 절대 끝과 일치합니다. 이 모드는 기본적으로 켜져 있습니다. U: 물음표와 같은 기능이고, '탐욕 모드'를 설정하는 데 사용됩니다. 7개의 PCRE 관련 정규식 함수: PHP의 Perl 호환 정규식 제공 여러 함수를 패턴 매칭으로 나누어 제공 , 대체 및 일치 숫자 등: 1. preg_match: 함수 형식: int preg_match(문자열 패턴, 문자열 제목, 배열 [ 일치]) 이 함수는 문자열의 패턴 표현식을 사용하여 일치시킵니다. [regs]가 주어지면 문자열은 [regs][0]에 기록되고, [regs ][1]은 기록된 첫 번째 문자열을 나타냅니다. 대괄호 "()"를 사용하면 [regs][2]는 기록된 두 번째 문자열을 나타내는 식입니다. preg는 문자열에서 일치하는 패턴이 발견되면 "true"를 반환하고, 그렇지 않으면 "false"를 반환합니다. 2. preg_replace: 함수 형식: 혼합 preg_replace(혼합 패턴, 혼합 대체, 혼합 주제) 이 함수는 표현식 패턴과 일치하는 문자열의 모든 문자열을 표현식 교체로 바꾸는 데 사용합니다. 대체 항목에 패턴의 일부 문자가 포함되어야 하는 경우 "()"를 사용하여 기록할 수 있습니다. 대체 항목에서는 "/1"을 사용하여 읽으면 됩니다. 3. preg_split: 함수 형식: array preg_split(string Pattern, string subject, int [limit]) 이 함수는 분할 함수와 동일합니다. 유일한 차이점은 분할이 간단한 정규 표현식을 사용하여 일치하는 문자열을 분할할 수 있는 반면 preg_split은 완전히 Perl과 호환되는 정규 표현식을 사용한다는 것입니다. 세 번째 매개변수 제한은 반환이 허용되는 정규화된 값의 수를 나타냅니다. 4. preg_grep: 함수 형식: array preg_grep(string patern, array input) 이 함수는 기본적으로 동일합니다. 위의 preg_match와 같지만 preg_grep은 주어진 배열 입력의 모든 요소를 일치시키고 새 배열을 반환할 수 있습니다. 다음은 예를 들어 이메일 주소의 형식이 올바른지 확인하고 싶습니다. 다음과 같이 코드를 복사하세요.
function emailIsRight($email) {
if (preg_match("^[_/.0-9a-z) -]+@([0- 9a-z][0-9a-z-]+/.)+[a-z]{2,3}$",$email)) {
1을 반환
}
0을 반환
if(emailIsRight('y10k) @963.net')) echo '맞음
';
if(!emailIsRight('y10k@fffff')) echo '잘못됨
'; ?> ;
위 프로그램은 "Corright
Incorcor"를 출력합니다.8. PHP 정규식과 Perl/Ereg정규식의 Perl 호환성 차이: Perl의 정규식과 비교하여 "Perl 호환 정규식이라고 하지만 PHP에는 여전히 몇 가지 차이점이 있습니다. 예를 들어 Perl에서는 수식어 "G"가 모두 일치합니다. PHP에서는 이 수정자를 지원하지 않습니다. ereg 계열 함수와 차이점도 있습니다. ereg도 PHP에서 제공하는 정규식 함수이지만 preg에 비해 훨씬 약합니다. 1. ereg에서는 구분 기호와 수식어가 필요하지 않으며 사용할 수 없으므로 ereg의 기능은 preg보다 훨씬 약합니다. 2. "."에 대하여: 정규 표현식의 점은 일반적으로 개행 문자를 제외한 모든 문자이지만, ereg의 "."는 개행 문자를 포함한 모든 문자입니다! preg에 개행 문자를 포함시키려면 "."을 수정자에 "s"를 추가하면 됩니다. 3. ereg는 기본적으로 탐욕 모드를 사용하며 수정할 수 없습니다. 이로 인해 많은 대체 및 매칭에 문제가 발생합니다. 4. 속도: 많은 사람들이 우려하는 질문일 수 있습니다. preg의 강력한 기능이 속도를 대신하는 것인가요? 걱정하지 마세요. preg가 ereg보다 훨씬 빠릅니다. 프로그램 테스트를 만들었습니다: 시간 테스트: PHP 코드: 다음과 같이 코드를 복사하세요:
echo "
reg_replace
사용 시간:";
$start = time();
for($i=1;$i
$str = "ssssssssssssssssssssssss";
preg_replace("/s/","",$str)
}
$ended = time()-$start
echo $ended;
echo "
ereg_replace 사용 시간:";
$start = time();
for($i=1;$i
$str = "sssssssssssssssssssssss";
ereg_replace("s","",$str)
$ended = time()-$start;
echo $ended;
echo "
str_replace 사용 시간 :";
$start = time();
for($i=1;$i$str = "ssssssssssssssssssssssss";
str_replace("s","",$str)
$ended = time()-$start;
echo $ended
결과:
Preg_replace 사용 시간:5
ereg_replace 사용 시간:15
str_replace 사용 시간:2
str_replace 매칭이 필요하지 않기 때문에 매우 빠르고 preg_replace는 ereg_replace보다 훨씬 빠릅니다.
9. PHP3.0의 preg 지원 정보:
Preg 지원이 추가되었습니다. PHP 4.0에서는 기본적으로, 3.0에서는 그렇지 않습니다. 3.0에서 preg 함수를 사용하려면 php3_pcre.dll 파일을 로드해야 합니다. php.ini의 확장 섹션에 "extension = php3_pcre.dll"을 추가한 다음 PHP를 다시 시작하세요!
사실
정규식도 UbbCode 구현에 흔히 사용되는 방식인데, 많은 PHP 포럼에서 이 방법을 사용하고 있지만, 구체적인 코드가 비교적 길다.
이상으로 특수문자, 정규표현식을 포함한 PHP 정규표현식 구문을 요약해서 소개하였습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.