나는 a, b, c 문자를 포함하는 길이 3의 하위 문자열로 시작하고 동일한 3개의 문자를 포함하는 또 다른 분리된 하위 문자열을 추가로 포함하는 단어 세트를 찾아 달라는 요청을 받았습니다.
전. abcacb acbbac
이에 대한 정규식을 찾는 데 도움을 주세요. 감사합니다
편집: abcbac - a,b,c는 처음 3글자로 있어야 하고, 그 다음 a,b,c는 이전 3글자의 순서를 바꿔야 합니다. 단 6개의 문자열입니다.
acbbca abcccba bacbca 등....
답변1
(여기서 솔루션은 grep
PCRE 지원으로 구축될 때 GNU를 가정합니다(일반적으로 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개의 문자와 일치합니다..*
사이의 어떤 것과도 일치합니다