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


103

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 부분 을 추가하는 방법을 잘 모르겠습니다 .

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

답변:


144

이렇게해야합니다.

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

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


8
참고로, regexr.com 에서 이러한 표현식을 테스트하는 좋은 방법을 확인하십시오 .
Joshua Pinter

항상 부정적인 예견을 잊어 버리고 매우 유용합니다
Alexei Blue

"http://www.anydotcom.com/test/search.cfm?metric=blah&selector=sized&value=1" =~ /^(?!.*details\.cfm).*selector=size.*$/ #=> 0부정확하다. (문자열에 "...selector=sized...".) 또한 왜 .*$끝에 있습니까?
Cary Swoveland

4

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

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

이것은 손상된 정규식이며 대괄호는 모든 패턴 시퀀스를 개별 문자의 조합으로 바꿉니다.
Wiktor Stribiżew

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

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

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

이것은 selector=size항상 이전 이라고 가정 details.cfm하며 마지막 URL에서는 그렇지 않습니다.
Kobi

이 문제를 해결하기 위해 내가 아니었다. 왜 누군가가 여기서 두 개의 답변에 반대표를 던지는 지 알 수 없습니다. 둘 다 맞습니다.
Kobi

@Kobi : 이것은 미리보기, 수정되었을 것입니다. 아, 그건 그렇고, 그게 당신의 반대표라고 의심하지 않았습니다.
Tomalak

0

나는 --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.*$'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.