>

크랙 할 수없는 다른 정규 표현식 :(

나는 egrep '([qwrtzpsdfghjklxcvbnmy]{1})|([qwrtzpsdfghjklxcvbnmy]{3})|([qwrtzpsdfghjklxcvbnmy]{5})|([qwrtzpsdfghjklxcvbnmy]{7})' greek.txt 와 함께 시도

이것은 또한 자음이 4 개인 단어를 반환하지만 그 이유를 이해하지 못합니다. 왜 4 모음의 단어와 일치합니까?

이것은 나의 greek.txt입니다 :

alpha
beta
gamma
delta
epsilon
zeta
eta
theta
iota
kappa
lambda
mu
nu
xi
omicron
pi
rho
sigma
tau
upsilon
phi
chi
psi
omega

알파는 괜찮아요 (l p h = 3), 베타는 아니고 (b t = 2), 감마는 괜찮습니다 (g m m = 3), 델타는 괜찮습니다 (d l t = 3).

  • 답변 # 1

    [abcde]{3}  세트 abcde 에서 3 개의 연속 문자와 일치 . 따라서 해당 세트에 1, 3, 5 또는 7 개의 연속 문자가 포함 된 행을 찾고 있는데, 이는 해당 문자 중 하나가있는 행을 찾는 것과 같습니다.

    그리스 문자를 찾으려면 첫 번째 단계는 라틴 문자가 아닌 그리스 문자와 패턴이 일치하는 것입니다. 그리스어 문자가 13 개 이상 포함 된 줄을 찾으려면 "그리스 문자 다음에 다른 문자가 나오는"13 가지 패턴이 있는지 확인하십시오. 다음은 소문자로 장식되지 않은 그리스 문자 만 찾는 패턴입니다.

    <greek.txt grep -E '([αβγδεζηθικλμνξοπρςστυφχψω].*){13}'
    
    

    13 개의 소문자로 장식되지 않은 그리스 문자 (luGl이 아닌 다른 문자)를 포함하는 줄을 원한다면 결과를 필터링하여 14luGl을 포함하는 줄을 제거하십시오.

    <greek.txt grep -E '([αβγδεζηθικλμνξοπρςστυφχψω].*){13}' |
    grep -v -E '([αβγδεζηθικλμνξοπρςστυφχψω].*){14}'
    
    

    13 luGl을 정확히 포함하고 다른 문자가없는 줄을 원한다면 :

    <greek.txt grep -x -E '[αβγδεζηθικλμνξοπρςστυφχψω]{13}'
    
    

    이제 짝수의 자음을 원한다면,"자음이 포함되지 않은 것, 뒤에 짝수 (자음이 포함되지 않은 것)"로 구성되는 줄을 찾으십시오. 홀수 인 경우 마지막 하위 패턴의 다른 항목을 추가하십시오.

    cons="βγδζθκλμνξπρςστφχψω"
    <greek.txt grep -E "^[^$cons]*([$cons][^$cons]*[$cons][^$cons]*)*[$cons][^$cons]"
    
    

    Perl에서 패턴 \p{Greek} 를 사용하여 그리스 문자를 일치시킬 수 있습니다 및 \p{Ll} 패턴을 ​​가진 모든 알파벳의 소문자 . 소문자 그리스 문자를 찾으려면 (?=\p{Ll})\p{Greek} 를 찾으십시오. . 유니 코드 의미론으로 스크립트를 실행해야합니다. 가장 쉬운 방법은 -C 로 실행하는 것입니다  선택권. 와이즈 비즈  일치 횟수를 계산하는 Perl 관용구입니다.

    () = m/REGEXP/g
    
    

    그리스 모음과 일치하는 내장 방법이 없으므로 문제의 두 번째 부분에 대한 Perl 솔루션은 명시 적으로 일치해야합니다.

    <greek.txt perl -C -l -ne 'print if (() = m/(?:(?=\p{Ll})\p{Greek})/g) == 13'

  • 이전 git - 서버의 SSH 에이전트 전달
  • 다음 linux - Windows와 Ubuntu를 이중 부팅하려고하지만 설치 프로그램에서 드라이브를 찾을 수 없습니다