2013-01-17 4 views
2
SELECT 'AaYYY1231' REGEXP '[A-Z,0-9]+'; 

결과 :왜이 MySql 정규식이 작동하지 않습니까?

1 

는 왜 나는 0을 반환 할 것으로 예상 할 때, 1을 반환? 'a'와 (과) 일치하는 항목이 어디에 있습니까?

+1

왜 0을 반환 할 것으로 예상합니까? 정규식과 일치하는 적어도 하나의 문자를 찾을 필요가 있습니다. – Barmar

답변

3

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

는 "REGEXP 이진 문자열을 사용할 때를 제외하고, 대소 문자를 구별하지 않습니다. '

다큐먼트에서 예 :

mysql> SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A'; 
+----------------+-----------------------+ 
| 'a' REGEXP 'A' | 'a' REGEXP BINARY 'A' | 
+----------------+-----------------------+ 
|    1 |      0 | 
+----------------+-----------------------+ 

또한, 욕심이 아니에요, 그래서 그 전체 문자열 일치를 보장하지 않습니다. 수율 위의 예 수정 :

mysql> SELECT 'a' REGEXP BINARY '[A-Z0-9]+', 'Aa' REGEXP BINARY '[A-Z0-9]+'; 
+-------------------------------+--------------------------------+ 
| 'a' REGEXP BINARY '[A-Z0-9]+' | 'Aa' REGEXP BINARY '[A-Z0-9]+' | 
+-------------------------------+--------------------------------+ 
|        0 |        1 | 
+-------------------------------+--------------------------------+ 

이 차지하기를, 당신은 라인의 시작과 끝을 위해 플래그를 추가 할 수 있습니다

mysql> SELECT 'Aa' REGEXP BINARY '^[A-Z0-9]+$'; 
+----------------------------------+ 
| 'Aa' REGEXP BINARY '^[A-Z0-9]+$' | 
+----------------------------------+ 
|        0 | 
+----------------------------------+ 

이 당신이 원하는 것을의 최종 답변에 이르게 :

mysql> SELECT 'AaYYY1231' REGEXP BINARY '^[A-Z,0-9]+$'; 
+------------------------------------------+ 
| 'AaYYY1231' REGEXP BINARY '^[A-Z,0-9]+$' | 
+------------------------------------------+ 
|          0 | 
+------------------------------------------+ 
+0

보너스 포인트, 나는 그것이 탐욕스럽지 않다는 것을 지적하기 위해 줄 수 있었으면 좋겠다. 고맙습니다. –

+0

메시지 102, 수준 15, 상태 1, 줄 1 'BINARY'근처의 구문이 잘못되었습니다. – KingRider

+0

@KingRider 새로운 StackOverflow 티켓으로 전체 입력, 출력 및 MySQL 버전을 포함하여 자신 만의 repro를 게시하는 것이 좋습니다. 첫 번째 예제는 MySQL docs (당시 5.1과 링크가 리디렉션되는 현재 5.7)에서 직접 나온 것입니다. 또한 디버깅 팁으로 주목할 가치가있는 것은 쿼리를 MySQL이 좋아하지 않는 부분에 대한 명확한 피드백을 얻기 위해 쿼리를 여러 줄로 나눕니다. – DreadPirateShawn

관련 문제