2012-08-10 3 views
1

에서 미리 정의 된 문자열없이 문자열 사이의 텍스트를 찾을 수 I했습니다 소위 작성된 텍스트 :정규 표현식은 중앙

11 bla gulp bla 22 
11 bla bla bla 2211 bla 
ble 
bli 22 

내가 모든 커플 "11"사이의 모든 텍스트를 찾으려면 정규식이 필요합니다 및 "22"이지만 이 아니며에 "gulp"이 포함되어 있지 않습니다. 내가 TextCrawler를 사용하여 (?s)11.*?22를 검색하는 경우

, 나는 모든 세 개의 문자열을 찾을 :

bla gulp bla 
bla bla bla 
bla ble bli 

잘못된!

bla bla bla 
bla ble bli 

는 "bla gulp bla"때문에 "gulp"를 포함, 나는 그것을 원하지 않아요 : 난 단지 얻을 싶습니다!

아이디어가 있으십니까? 이 gulpgulping, gulped 또는 ungulp을 구별 할 수 있도록 때문에 (

11(?!.*?gulp.*?)(.*?)22 

단어 경계 (gulp 주변) 중간에 좋은 생각이 될 수 있습니다 :-)

+1

어떤 구현을 사용하고 있습니까? JS? PHP? –

+0

@ acheong87 - TextCrawler가 언급되었으므로 해당 프로그램의 웹 페이지에서 "TextCrawler는 VBScript/JavaScript ECMA-262 정규식을 구현합니다."라는 말을 정확하다고 가정합니다. –

+0

@CodeJockey - 아, TextCrawler에 일종의 정규식 테스터/원조를 착각했습니다. 좋은 연구! –

답변

1

는 부정적 예측의 주장을 사용 ?) :

11(?!.*?\bgulp\b.*?)(.*?)22 

하지만 모든 주위에 이르렀 :

\b11\b(?!.*?\bgulp\b.*?)(.*?)\b22\b 

은 원하는 결과가 아닌 다른 두 결과를 제외합니다.

+0

당신이 나와 당신이라면, 거의 동일 답변으로 공간을 오염시키는 대신 해명을 위해 귀하의 솔루션을 친절하게 편집하고 댓글을 달았습니다. 그러나 나는 "명성을위한 사냥에서"사람들은 항상 커뮤니티의 이익에 항상 부합하지 않는 일을한다고 생각합니다. (예, 당신은 비 욕심의 한정어를 추가했습니다. 편집, 그리고 당신은 단어 경계에 대해 좋은 지적을 가지고 있지만 개인적으로 OP가 문제를 지나치게 단순화하여 사용할 수 있다고 생각했습니다. 감사합니다.) –

+0

@ acheong87 제 코멘트가 확실하지는 않지만, 나는 과거에 내 자신의 대답을 제공하기보다는 그러한 일에 대해 자주 논평합니다. 그러나 대답이 신속하게 주어졌지만 1 또는 2 (내가 인식하는 것) 이상의 오류가있는 것으로 나타 났을 때 (인라인 JavaScript 문법을 사용하는 두 표현식, 탐욕스러운 한정어, 부적절한 단어 경계 어설 션에 그룹을 캡처하지 않음 [ '], 텍스트 에디터의 경우, 아마도 더 많이), 내 자신의 대답을 만들고 아마 더 심각한 오류 (들)를 지적하는 것이 더 쉽다. 테스트를 통해 오류가 강조 표시되었습니다. –

+0

@ acheong87 나는 "평판을 찾으려는 것"이라고 생각하지 않지만 자기 자신을보기는 어렵다. 때로는 빠른 답변이 더 좋습니다 (즉, OP에 더 유용합니다). 때로는 신중하고 신중하게 작성된보다 철저하게 테스트 된 대답이 선호됩니다. 두 가지 유형의 응답 (및 응답 제공 업체)이 사이트에 표시되며 특히 평판 모델 –