[regex] 한 단어 만 포함하고 다른 단어는 포함하지 않는 문자열에 대한 정규식

Google 애널리틱스에서 몇 가지 목표를 설정하고 있으며 정규식 도움말을 사용할 수 있습니다.

URL이 4 개 있다고 가정 해 보겠습니다.

http://www.anydotcom.com/test/search.cfm?metric=blah&selector=size&value=1
http://www.anydotcom.com/test/search.cfm?metric=blah2&selector=style&value=1
http://www.anydotcom.com/test/search.cfm?metric=blah3&selector=size&value=1
http://www.anydotcom.com/test/details.cfm?metric=blah&selector=size&value=1

selector = size 문자열은 포함 하지만 details.cfm 은 포함하지 않는 URL을 식별하는 표현식을 만들고 싶습니다.

다른 문자열을 포함하지 않는 문자열을 찾으려면 다음 식을 사용할 수 있습니다.

(^((?!details.cfm).)*$)

그러나 selector = size 부분 을 추가하는 방법을 잘 모르겠습니다 .

어떤 도움이라도 대단히 감사하겠습니다!



답변

이렇게해야합니다.

^(?!.*details\.cfm).*selector=size.*$

^.*selector=size.*$충분히 명확해야합니다. 첫 번째 비트 (?!.*details.cfm)는 음의 미리보기입니다. 문자열을 일치시키기 전에 문자열에 “details.cfm”이 포함되어 있지 않은지 확인합니다 (앞에 몇 개의 문자 포함).


답변

정규식은 다음과 같을 수 있습니다 (perl 구문).

`/^[(^(?!.*details\.cfm).*selector=size.*)|(selector=size.*^(?!.*details\.cfm).*)]$/`


답변

^(?=.*selector=size)(?:(?!details\.cfm).)+$

정규식 엔진이 포즈 한정자를 지원했다면 (Google Analytics는 지원하지 않는다고 생각하지만), 대규모 입력 세트에서 더 잘 수행 될 것 같습니다.

^[^?]*+(?<!details\.cfm).*?selector=size.*$


답변

나는 --line-bufferedOP와 Kobi의 솔루션이 나를 위해 잘 작동하는 것과 비슷한 상황에서 꼬리 를 피할 방법을 찾고있었습니다 . 내 경우에는 ' / '(내 루트 문서의 경우) 포함하는 동안 “bot”또는 “spider”가있는 줄을 제외합니다 .

내 원래 명령 :

tail -f mylogfile | grep --line-buffered -v 'bot\|spider' | grep ' / '

이제 ( -Pperl 스위치 사용) :

tail -f mylogfile | grep -P '^(?!.*(bot|spider)).*\s\/\s.*$'


답변