2011-08-02 4 views
8

특정 단어가 없으면 문자열의 모든 내용과 일치하는 정규 표현식을 작성해야합니다. 예를 들어이 문자열을 촬영 :Regex - 전체 문자열 일치하지 않는 한

http://12.34.567.890/sqlbuddy 

모든 것을 일치하는 표현은 : 그것은 하지 일치하는 모든 문자열이 포함 된 것인지 있도록 수정해야

^.*$ 

... 단어 "sqlbuddy". 나는 부정적인 lookahead가 그것을 할 것이라고 생각했다. 그러나 그것은 나를 위해 일하지 않는다.

^(?!sqlbuddy).*$ 

어떻게이 문제를 수정해야합니다 :

예를 들어, I는 작동하지 않습니다,이 시도?

답변

5

sqlbuddy을 가정하기 때문에 예 작동하지 않는 문자열의 시작입니다. 당신이 정말로 당신의 문자열이 주어진 단어가 포함되어 있는지 확인하려면

^(?!.*sqlbuddy.*).*$ 

그러나, 다음 어쩌면 "http://12.34.567.890/sqlbuddy".contains("sqlbuddy")이 충분합니다 : sqlbuddy 문자열 어디서나 나타날 수 있도록, 다음으로 변경해야합니다. 당신은 [긴] 문자열 (다중 일치와 긴 텍스트)의 특정 장소에서만 검색 할 경우

+0

감사합니다. mod_rewrite와 함께 사용하고 있으므로 .contains()를 사용할 수는 없지만 작동하며 아래의 다른 답변도 마찬가지입니다. 그러나 어떤 이유로 그것은 http://gskinner.com/RegExr/에서 정규식 테스터를 사용하지 않습니다 – Allen

+0

@Allen, rubular를 확인하십시오. Regex 테스트에 사용하는 것이므로 정말 마음에 듭니다. –

+0

+1하지만 약간의 조정 :'sqlbuddy '다음에'. *'는 필요 없습니다. 게으르거나 역 추적 할 것인지에 따라 ($!)'(? m.) ($! . – zx81

2

또한이 작업은 다음과 같습니다. 'sqlbuddy'문자열의 위치는 중요하지 않습니다.

^((?!sqlbuddy).)*$

+0

http://rubular.com/r/9MD67F0VtS 확인해보세요. –

0

... 또한 (다른 사람들에게), 당신은 사용할 수 있습니다

first_part_of_string(?!.*sqlbuddy.*)second_part_of_string 

또는 더 관대 :

first_part_of_string.*(?!.*sqlbuddy.*).*second_part_of_string 
관련 문제