길이가 3인 하위 문자열로 시작하고 문자 a, b, c를 포함하고 동일한 3개의 문자를 포함하는 또 다른 분리된 하위 문자열도 포함하는 단어 집합을 찾으라는 요청을 받습니다.
전임자. abcacb abcbac
정규식을 찾는 데 도움을 주세요. 감사해요
편집: abcbac - a, b, c는 처음 3글자여야 하며, 그런 다음 a, b, c는 처음 3글자의 순서를 변경해야 합니다. 끈은 6개뿐입니다.
acbbca abcccba bacbca 등...
답변1
(여기서의 솔루션은 grep
GNU가 PCRE 지원으로 구축되었다고 가정합니다(보통 cygwin의 경우).)
귀하의 요청의 전반부는 다음을 의미합니다.
grep -Pwo '(abc|acb|bac|bca|cab|cba)\w*(?1)\w*'
아니면:
grep -Pwo '(abc|acb|bac|bca|cab|cba)\w*\1\w*'
후반부는 전반부와 모순되는 것 같습니다.
grep -Pwo '(abc|acb|bac|bca|cab|cba)(?!\1)(?1)'
찾을 것이다성격(단어이 경우 문자 시퀀스로 정의됨), [a-zA-Z0-9_]
및(각 문자당 하나)로 구성된 3자 시퀀스로 시작하지만 그 뒤에는 또 다른 시퀀스(첫 번째 그룹과 동일한 정규 표현식 참조)가 옵니다. 단, 첫 번째 캡처 그룹과 다른 경우(첫 번째 캡처 그룹과 일치하는 문자열 참조)a
b
c
(?1)
(...)
\1
(...)
(?!...)
부정적인 전망운영자).
$ echo abcbca abcbcax abcabc aaabbb xcabacb abcacb-blah |
grep -Pwo '(abc|acb|bac|bca|cab|cba)(?!\1)(?1)'
abcbca
abcacb
답변2
이렇게 하면 트릭을 수행할 수 있습니다.
grep -Ew '[a-c]{3}.*[a-c]{3}'
-E
정규식 일치-w
단어만 일치[a-c]{3}
a-c
세트의 문자 3개와 정확히 일치합니다..*
사이의 어떤 것과도 일치합니다