Programing

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

lottogame 2020. 9. 1. 07:55
반응형

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


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.*$

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

내 원래 명령 :

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

이제 ( "-P"perl 스위치 사용) :

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

참고 URL : https://stackoverflow.com/questions/2953039/regular-expression-for-a-string-tained-one-word-but-not-another

반응형