2012-02-15 2 views
0

나는이 두 정규 표현식 사이의 차이점을 알고 싶습니다. 무엇이 프로인지 죄수입니까?PHP 정규식 차이점

입력 예 (날짜) 31-12-2012.

Method A: 
/(\d{2}-\d{2}-\d{4})/ 

그리고 :

Method B: 
^[0-9]{2}[-/][0-9]{2}[-/][0-9]{4}\$ 
+0

이 숙제로 포장되어 있기 때문에? –

+1

'\ d' 대'[0-9 ]' 차이점 뒤에 _only_ 있습니까? 왜냐하면 (2)에서'^'를 시작하는 것은 시작 부분에 앵커를하기 때문에 (1의 어떤 것도없고, 어떤 텍스트의 어딘가에있는 날짜와) 마침표'\ $'는 줄 끝이 아닌 문자'$'를 의미하기 때문에 (\를 빼내어). 나에게 매우 중요한 구별 ... 또한, 캡쳐 ('()') 대 캡쳐되지 않은 고정'-' 구분자 또는 구분자로 인식되는'-'과'/'둘 다 .... 차이점이 많습니다. – Wrikken

+0

B는/[0-9] {2} - [0-9] {2} - [0-9] {4} /'이어야합니다. – powtac

답변

2
  1. 첫 번째 단락 기호는 /이며 두 번째 것은 구분 기호가 없습니다. 지금은 복사/붙여 넣기 문제라고 가정합니다.
  2. B 문자가 ^ 인 문자열의 첫 번째 항목으로 표시되도록하려면 A는 "a datestring anyw00-00-0000where in the string"과 일치해야합니다.
  3. A는 일치 항목 1의 날짜를 추가 ()으로 캡처합니다. B는 그런 일을하지 않습니다. 경기에서 전체 경기가 0 번째 항목이므로 불필요한 ()을 (를) 잃을 수 있습니다.
  4. \d[0-9] ->Avner's answer을 참조하십시오.
  5. A는 일/월/연도 구분 기호로 -과 일치합니다. - 만 기대하면 사용하십시오. -/이 모두있는 경우 B와 같이 [-/]을 사용하십시오.
  6. B는 $으로 끝나는 날짜를 원하며 A는 그렇지 않습니다. 적용되는 것을 사용하십시오. 아무런 이유없이 중복 된 따옴표로 묶인 문자열이므로 복사/붙여 넣기 오류 ($)라고 가정하면 은 앵커링으로 인해에만 날짜가 일치하고 A에는 날짜 문자열이 입력. 다시 한 번, 귀하의 데이터에 적용되는 옵션을 사용하십시오.
  7. 둘 중 누구도 날짜를 확인하지 않습니다. 일종의 형식 일뿐 하나가 아닐 수도 있습니다.
2

방법 B는 분리 문자 슬래시뿐만 아니라 대시를 받아 들일 것입니다. 그렇지 않으면 동일합니다.

또한, 방법 B가 받아들이는 점에 유의 :

31/12-2012 또는 31-12/2012

내가 생각할 수있는 유일한 죄수가 더 긴 문자열이기 때문에 방법 B는 더 많은 디스크 공간을 차지한다는 것입니다.

+0

_ 그 밖에도 same_ => 정말로 있습니까? 여분의 슈퍼 정말? – Wrikken

2

\ d는 [0-9]와 거의 동일합니다. 나는 [0-9]에 대해 더 작은 파싱에 관련된 작은 조각이 있다고 생각할 수 있습니다. 그러나 이것은 무시할 수 있습니다.

그럼 남은 유일한 차이는 방법 B는 또한 파싱이다 :

31/12/2012

2

이론적 \d 단지 이상 잡을한다 [0-9]. 이론적으로 [0-9] (아라비아 숫자)와 유니 코드 표준에 포함 된 다른 숫자 형식을 "숫자"로 포함해야합니다. 고대 그리스 문자 및 로마 숫자, 막대 개수, 동아시아 문자, 비합리적인 숫자 및 16 진수가 포함될 수 있습니다. Really.

실제로 대부분의 정규 표현식 파서는 내가 테스트 한 몇몇 온라인 정규식 도구에서이를 제대로 처리하지 못한다고 생각합니다.

1

방법 A 다시 참조 한 것 (또는 $ 1, 또는 \ 1 - 언어가 무엇이든)이 정규식은()