2017-05-04 1 views
2

저는 이것이 중복되지 않기를 바랍니다. 그렇게 생각하지는 않아도 몇 시간 동안 reg ex answers를 검색했습니다!정규 표현식 - 문자열 내의 특정 문자열을 포함하지 않습니다.

정규 표현식을 사용하여 검색 결과에 문자열에 'bot'이라는 단어가 포함되어서는 안된다고 말하는 방법이 있습니까?

다른 위치에서 부정적인 미리보기를 사용하고 있지만 문제는 어디에 '봇'단어가 나타날지 모릅니다. 더 긴 단어의 일부일 수도 있고, 시작, 끝 또는 양쪽에 나타날 수도 있습니다! 나머지 표현식과 일치하는 결과를 포함하고 싶지만 '봇'도 제외하고 싶습니다.

이 내 현재 검색 표현이다 : 그것은 '포함으로

2017-02-16 15:56:00 10.3.1.17 GET /UserInfo.aspx UID=111 80 - 157.85.39.17 Mozilla/5.0+(compatible;+bingbot/2.0;++http://www.bing.com/bingbot.htm) 200 0 0 390 

가 이상적으로는이 결과를 제외 할 것 :

2017-0[2-5] (.*) (UserInfo.aspx UID=111 80 -)=(?!10. *)+. * 

그리고 난에 검색하고 결과는 일반적으로 다음과 같이 봇 "이 내 RegEx의 첫 번째 부분과 여전히 일치하더라도.

+0

질문이 명확하지 않습니다. 캡처하는 그룹을 사용하여 전체 라인을 일치시키고 그 일부를 추출합니까? 패턴의 시작 부분에'^ (?!. bot)'을 추가하십시오. 'bot' 부분 문자열을 포함하는 모든 줄에서 실패합니다. –

+0

정규 표현식이이 텍스트와 일치하지 않습니다 – Mistalis

+0

크롬에서 대괄호와 별표를 무시했기 때문에 정규식에 공백을 추가해야했습니다. 그래서 예제가 제대로 보이지 않습니다. – RProcter

답변

0

가능한 경우 두 단계 프로세스로 구현하십시오. 예를 들어, 이것이 스크립트에있는 경우 두 행을 확인하십시오. 하나는 행에 봇이 있는지 테스트하고 두 번째 단계는 봇이 없으면 기존 정규 표현식을 수행합니다.

복잡한 일치 요구 사항을 여러 테스트로 분할하는 것은 좋은 생각입니다. 더 명확한 코드가되며, 특히 이전 검사가 단순한 경우 더욱 효율적일 수 있습니다.

이 단계를 별도로 수행하면 음수 일치 대신 간단한 양성 일치를 사용할 수도 있습니다.

예 의사 코드 : 난 (

(?!^.*bot)2017-0[2-5] (.*) (UserInfo.aspx UID=111 80 -)=(?!10. *)+. * 

: 당신은 하나의 정규식으로 제한하는 경우

if (!string.contains('/bot/') and string.contains('/yourpatternhere/')) 
{ 
    do stuff 
} 

는 단순히 문자열의 시작 부분에 부정적 예측을 사용 여기서 옳은 것 같지 않은 여기에 정규식과 다른 가능한 문제를 무시 ...)

+0

이것은 완벽하게 감사했습니다! – RProcter

관련 문제