저는 정규식을 처음 접했고 각 게임의 고유한 이벤트를 모두 추출하려고 합니다. 따라서 파일에 FA 컵 경기가 얼마나 많이 있는지에 관계없이 FA 컵을 반환해야 하지만 한 번만 반환됩니다.
<Date="2014-02-15" Competition="FA Cup" Home="West Bromwich Albion">
검증된 솔루션을 기반으로이 질문은 여기에 있습니다., 나는 이것을 시도했습니다 :
grep -o 'Competition=".*\" 'Soccer_Data.xml' | sort --unique
하지만 그 이후의 모든 항목을 반환 Competition="
하지만 큰따옴표가 처음 발생하기 전의 모든 항목만 반환합니다 "FA Cup"
. 즉. 또한 같은 경기로 여러 번 돌아옵니다!
.*?
다중 반품을 방지하기 위해 아래 솔루션에 제안된 대로 사용해 보았 으나 아무것도 반환하지 않아 정반대의 문제가 발생했습니다!
https://stackoverflow.com/questions/22444/my-regex-is-matching-too-much-how-do-i-make-it-stop
누군가 사용할 올바른 정규식이 무엇인지 말해 줄 수 있습니까?
답변1
grep
사용Posix 기본 정규식기본적으로.
.*
기본 정규 표현식에서는 항상탐욕스러운 매칭, 이는 다음까지의 모든 항목과 일치함을 의미합니다.마지막 "
줄을 서서.
[^"]*
을 제외한 모든 것과 일치시키기 위해 반대를 사용할 수 있습니다 "
.
grep -o 'Competition="[^"]*"' 'Soccer_Data.xml' | sort --unique
산출:
Competition="FA Cup"
또는 .*?
탐욕스럽지 않은 수정자를 제공하는 Perl 호환 정규식을 사용하십시오( ). 귀하의 버전에서 이를 제공하는 경우
이를 사용할 수 있습니다(질문에 태그를 추가했기 때문에 그렇게 됩니다).grep -P
grep
[ubuntu]
grep -Po 'Competition=".*?"' 'Soccer_Data.xml' | sort --unique
또는 예를 들어 FA CUP
다음을 사용하여 수신하십시오."피하다"--> \K
:
grep -Po 'Competition="\K[^"]*' 'Soccer_Data.xml' | sort --unique
산출:
FA Cup