2014-04-06 5 views
0
--Return rows that have one or more words that follow a string that 
--begins with 'Call me Ishmael.' 


with string_row as 
(select 'Call me Ishmael.'    as line_1 from dual union all  --False 
    select 'Call me Ishmael. Some years ago .' as line_1 from dual union all --True 
    select 'Call me Ishmael Some years ago .' as line_1 from dual union all --True 
    select 'Call me Ishmael, Some years ago .' as line_1 from dual union all --True 
    select 'Call me Ishmael .'     as line_1 from dual union all --False 
    select 'Twas the best of times. Some years ago.' as line_1 from dual union all --False 
    select 'Call me Ishmael  '    as line_1 from dual -- False 
) 
select line_1 
     from string_row where 
     regexp_like(line_1,'Call me Ishmael\w{1,}') --original attempt. 
     regexp_like(line_1,'Call me Ishmael[., ]+\b([\w .,]+)') --Attempt that appears to work on Javasrcipt. 

질문 :일치하는 정규식 뒤에 하나 이상의 단어가 오겠습니까?

왜이 정규식 작동하지 않는 이유는 무엇입니까?

정규식이란 무엇입니까?

+0

요즘 긴 질문을 게시 어려움을 겪고 있었어요. 그래서 나는 그것을 단편적으로 다뤄야한다. http://meta.stackexchange.com/questions/197468/where-can-i-get-more-information-about-my-submission-error – zundarz

답변

2

이 정규식 작동 : 그것을 따라 Call me Ishmael 마침표, 쉼표 또는 공백 후

Call me Ishmael[., ]+\b([\w .,]+) 

Regular expression visualization

Debuggex Demo

텍스트는 캡처 그룹 하나에 배치됩니다.

정규식의 문제, Call me Ishmael\w{1,}

는 어떤 문자, 숫자의 (+에 해당 {1,}) 하나 이상을 일치하려고, 또는 (\w)를 밑줄 것입니다. 많은 줄에는 쉼표, 공백 및 마침표가 포함되어 있으므로 해당 문자도 캡처 할 수 있도록 확장해야합니다.


Oracle regex에는 단어 경계가없는 것으로 보입니다. 그래서 그 대신이 시도 :

Call me Ishmael[., ]+(\w[\w .,]*) 

Regular expression visualization

Debuggex Demo

+0

응답 해 주셔서 감사합니다. Ishmael 다음에 어떤 단어도 없기 때문에 첫 번째 줄과 일치하고 싶지 않습니다. Ishmael 다음에 추가 단어가있는 경우에만 일치하는 것을 원합니다. – zundarz

+1

공백, 쉼표 또는 마침표 뒤에 * 첫 단어 경계 *에서 시작되도록 일치하도록 변경했습니다. – aliteralmind

+0

나는 이것이 당신의 데모에서 작동한다는 것을 알았습니다. 그리고 이것은 제가 원하는 것입니다. 그러나 이것은 regexp_like를 사용하여 Oracle 11g에서 작동하지 않는 것으로 보입니다. – zundarz

관련 문제