[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-buffered
OP와 Kobi의 솔루션이 나를 위해 잘 작동하는 것과 비슷한 상황에서 꼬리 를 피할 방법을 찾고있었습니다 . 내 경우에는 ' / '
(내 루트 문서의 경우) 포함하는 동안 “bot”또는 “spider”가있는 줄을 제외합니다 .
내 원래 명령 :
tail -f mylogfile | grep --line-buffered -v 'bot\|spider' | grep ' / '
이제 ( -P
perl 스위치 사용) :
tail -f mylogfile | grep -P '^(?!.*(bot|spider)).*\s\/\s.*$'