2012-02-08 3 views
1

하나의 오픈 소스 코드를 참조하고 있습니다. 저기 필터 의이 종류와 SQL을 찾을 수 있습니다.__ * in Mysql 정규 표현식

select sometext from table1,table2 where table1.sometext LIKE 
CONCAT('% ',table2.test_keyword,' %') AND table2.test_keyword NOT 
REGEXP '__*'; 

이 SQL에서 __ *는 무엇입니까?

+1

정규 표현식 책에 문의 했습니까? –

답변

5

__*_에 이어과 일치합니다.

__* 
^^^ 
||\__ (zero or more) ^
|\___ underscore   | 
\____ underscore, then | 

_+

같은 일을했을 것입니다.

_+ 
^^ 
|\__ (one or more)  ^
\___ underscore   | 
+0

'_' 다음에 ** ** ** ** 이상이옵니다. – kennytm

+1

@KennyTM : 그건 내가 쓴거야! ;) –

1

하나 이상의 밑줄 문자입니다. ,

  • '_' 0 이상의 밑줄 뒤에 정확히 하나 밑줄
  • '_*'을 :

    패턴

    최상으로 판독된다.

는 기본적으로 밑줄 임의의 문자열을 의미하므로 (시작 마커없이, 문자열의 모든 위치에서 패턴과 일치하는 것, 명심 또는, 더 정확하게, 당신부터 ' NOT을 사용하는 경우 문자열없이 밑줄을 사용하십시오.

또한 AND table2.test_keyword NOT REGEXP '_'과 동일한 효과를 얻을 수 있기 때문에 불필요하게 복잡합니다.

regexes에 대한 최신 MySQL 설명서는 here을 참조하십시오 (이 대답 당시 5.6).