2012-08-15 6 views
3

regexp의 새로운 기능으로 일부 기능을 이해하는 데 도움이됩니다. 저는 현재 단어 뒤에 공백이오고 가능한 여러 단어로 시작하는 데이터 세트를 선택하려고합니다.regexp_like는 속성 문자열에 여러 단어가 포함 된 행을 선택합니다.

예 1 : XYZ 제품 1, 제품 1 블랙, 제품 1 흰색, 제품 1 쓰레기 빨간색 : 나는 기본적으로 같은 제품 1 그린, 제품 1 빨강, 제품 1 블루 (녹색, 기본적으로 빨간색 또는 파란색)하지만 같은 데이터를 선택하기 위해 찾고 있어요.

나는 그다지 성공을 다음과 같은 쿼리 시도 : 예를 들어 단어가 녹색으로 포함 된 항목을 선택

Where regexp_like(item, 'Product1 [green | red | blue]'); 
Where regexp_like(item, 'Product1 [green, red, blue]'); 
Where regexp_like(item, '^Product1 [green, red, blue]'); 

꼽은가, 누군가가, 내가도를 구현하는 'AND'할 수있는 방법을 알고 않으며, 동일한 속성의 빨간색.

예 2 : 유사 상황,하지만 난 상공을 가지고 작업을 선택 찾고이 쿼리와 구두점

Where regexp_like (job, 'Commerce [[:punct:]] .*'); 

후 단어를 일치하도록 시도 - 시험 상업 :

ABCDEFG 이러한 쿼리는 예상대로 작동하지 않으며 이유를 정확히 파악할 수 없습니다. 나는이 정규 표현식의 구성을 잘못 이해했다고 가정합니다.

도움/설명을 제공해 주시면 대단히 감사하겠습니다. 첫 번째 경우는 0 개 이상의 수 -

답변

2

첫 번째를 들어,

WHERE REGEXP_LIKE(ITEM, '^Product1.*(green|red|blue)') 

또는

WHERE REGEXP_LIKE(ITEM, '^Product1 (green|red|blue)') 

또는

WHERE REGEXP_LIKE(ITEM, '^Product1 +(green|red|blue)') 

당신이 Product1 후 기대에 따라 다음 시도 어떤 종류의 문자라도, 두 번째 문자는뒤에 하나의 공백이 있어야합니다.이고, 세 번째는 Product1 뒤에 하나 이상의 공백이 필요합니다.

정확히 어디로 갈 것인지 확실하지 않습니다. 당신이 정말로 구두점 문자, 다른 공간, 그리고 아무것도 다음에 공백 '상업',로 시작하는 문자열을 원하는 경우 대신 문장 부호 문자의 당신이 찾고있는 경우,

WHERE REGEXP_LIKE(JOB, '^Commerce [:punct:] .*'); 

시도 중 ':'또는 '-',

WHERE REGEXP_LIKE(JOB, '^Commerce [:-] .*'); 

내가 정규 표현식에 더 큰 전문가는 아니지만 시도하지만 몇 가지 설명을 제공하려고합니다 :
  • ^

    이 요구를 그 다음 요소 끈의 시작 부분에 있어야한다. 따라서 첫 번째 경우 ^Product1은 " 'Product1'이 문자열의 시작 부분에 있어야 함을 의미합니다.
  • 정규 표현식에서 괄호는 표현식을 그룹화하는 데 사용되므로 첫 번째 경우는 (green|red|blue)이 함께 그룹화됩니다.
  • |은 논리 OR이므로 (green|red|blue)은 "반드시 '녹색'또는 '빨간색'또는 '파란색'중 하나 여야 함을 의미합니다.
  • 대괄호는 문자 클래스에 사용됩니다. punct : 또는 : space :와 같은 사전 정의 된 클래스를 사용하거나 [:-]처럼 자신 만의 클래스를 만들 수 있습니다. 정규 표현식 해석 중에 대괄호 문자 클래스는 길이에 관계없이 일치하는 문자열에서 단일 문자를 나타냅니다. 따라서 정규 표현식 ^Commerce [:-] .*에서 문자 클래스 [:-]은 "콜론 또는 대시 찾기"를 의미합니다. 클래스 뒤에 문자가 여러 번 나타날 것으로 예상하는 경우 클래스 뒤에 반복 연산자 (* 또는 +) 중 하나를 사용하십시오. 따라서 은 모두 abcabcabc과 일치합니다.

또한 정규 표현식의 모든 캐릭터가 무언가를 의미 것을 명심, 그래서 당신은 공백이 식을 해석 할 때 찾았다됩니다 뭔가되기 때문에 정규 표현식을 더 읽기 쉽게하기 위해 공백을 사용할 수 없습니다.

공유하고 즐기십시오.


편집

에 대한 AND 이전 질문을 통지하지 않았나요. 여러 표현식을 결합하는 간단한 방법은 하나씩 차례대로 표현하는 것입니다. (| 레드 | 그린, 블루) 뒤에 공백 (| | 빨강, 파랑, 녹색),를 찾으십시오 잠재적으로 여러 공간은 색상을 허용한다면

WHERE REGEXP_LIKE(ITEM, '^Product1 (green|red|blue) (green|red|blue)') 

것 간단한 표현

WHERE REGEXP_LIKE(ITEM, '^Product1 (green|red|blue) +(green|red|blue)') 

이 사용될 수있다.

저항은 쓸모가 없습니다.

+0

도움을 주셔서 감사합니다. 'Product1xasdasdgreen'(임의의 문자 기호 때문에)과 같은 조합을 허용하지 않습니까? "단어"가 뚜렷한 것을 어떻게 고려해야하는지 설명 할 수 있습니까 (예 : 제품 1 녹색/빨간색/파란색). 감사! – user1523257

+0

분명히 당신이 당신의 코멘트를 쓰는 동안 두 번째 예제를 추가했습니다. 나는 당신이 의미하는 바를 "... 별개의 단어"로 이해하지 못합니다. 게시물을 수정하고 일치해야하거나 불필요한 예를 추가하십시오. 감사. –

+0

@ user1523257 - 이전에 AND 로직에 대한 쿼리를 발견하지 못 했으므로 답변 끝에 추가했습니다. –

관련 문제