2012-03-01 2 views
-4
1. (.*?) 
2. (*) 
3. #regex# 
4. /regex/ 

가. 위의 기호는 무엇을 의미합니까?
B. #과 /는 다른 점은 무엇입니까?설명 정규식

나는 치트 - 시트를 가지고 있지만, 아직 풀지는 않았다. 내가 아는 것은 모든 문자를 얻습니다. ~입니다!

위의 패턴은 PHP preg_match 및 preg_replace에서 사용됩니다.

+0

초 하나는 아마도 유효하지 않거나 본인은 맛에서 PHP 정규식과 정규 표현식에 차이점이 무엇인지 배워야한다 .. – Benoit

+0

앞으로는 질문 당 하나의 질문을 고집하십시오. –

답변

5
  • . matches any character (roughly).
  • *?은 소위 quantifier으로, 이전 토큰과 적어도 0 번 일치합니다 (일치를 완료하는 데 필요한만큼 자주 - 이는 게으르다. 따라서 ?).
  • (...)capturing group을 만들면 정규식 또는 일치하는 항목에서 참조 할 수 있습니다. 이것들은 또한 | 교대의 범위를 정규 표현식의 일부로 제한하는 데 사용됩니다 (수학의 괄호가 선명해야 함).
  • /.../#...#은 PHP에서 전체 정규 표현식의 구분 기호입니다. 기술적으로 그들은 정규식 구문의 일부가 아닙니다. 당신이 사용하는 구분자는 당신에게 달려 있지만 (\은 사용할 수 없다고 생각합니다.) 주로 정규 표현식에서 어떤 문자를 이스케이프해야 하는지를 변경합니다. 그래서 /은 대다수의 슬래시가 포함될 수있는 URI가 일치 할 때 나쁜 선택입니다. C++ 스타일의 끝 (end-of-line) 주석을 찾기 위해 다음과 같은 두 가지 varaints 비교 :

    preg_match('/\/\/.*$/', $text); 
    preg_match('#//.*$#', $text); 
    

    후자는 당신이 정규식 자체 내에서 슬래시를 탈출하지 않는 한 쉽게 읽을 수 있습니다. # 또는 @은 일반적으로 구분 기호로 사용되며 눈에 잘 띄며 텍스트에서 자주 사용되지는 않으므로 원하는대로 사용할 수 있습니다.

    기술적으로이 구분 기호는 전혀 필요하지 않습니다. 이것은 대개 PHP의 Perl 유산의 대부분입니다 (Perl 정규 표현식에서는 구분되지만 문자열에는 포함되지 않습니다). 문자열을 사용하는 다른 언어 (예 : Java, C# 또는 PowerShell과 같은 기본 정규식 리터럴이 없기 때문에)는 구분 기호없이 잘 수행됩니다. PHP에서는 /a/i 같은 닫는 구분 기호 뒤에 옵션을 추가 할 수 있습니다 (대문자와 소문자를 구분하지 않음) a 또는 A과 일치하지만 정규식 (?i)a은 정확하게 동일하며 구분 기호가 필요하지 않습니다. 당신이 Regular-Expressions.info을 통해 읽을 시간이 걸릴

그리고 다음 번에, 아주 잘하고 철저하게 많은 것들을 설명하는 정규 표현식의 기초 및 advcanced 주제에 멋진 참조입니다. 이와 관련하여 PHP documentation을 살펴보십시오.

1

글쎄, 실제 질문 하나만 붙이세요.

다른 질문은 이미 답변되었으므로이 질문은 3 + 4 질문에 대한 답변입니다. Regexpes는 일반적으로 /로 구분됩니다./abc123/또는/foo | bar/i. PHP에서는 원하는 문자를 사용할 수 있습니다. /로 제한되지 않습니다. 예 : 예 : # 또는 %, #/usr/local/bin #.

+0

D' oh, 나는 조이가 이미 모든 질문에 대답했다는 것을 몰랐다. –

+0

나는 보통 불완전한 답변을 게시하지 않으려 고합니다.) – Joey