망막 , 7 바이트
!rm`.*$
단일 정규 표현식으로 Retina는 일치 모드에서 실행됩니다. 이것은 일반적으로 일치 횟수 !
를 인쇄하지만 실제 일치를 대신 인쇄하도록 구성합니다 (줄 바꿈으로 구분).
실제 정규식은 단지 .*$
입니다. 줄 바꿈을 제외한 모든 문자와 일치 할 수 .*
있으므로 모든 행과 일치합니다 (잠재적으로 비어 있음) .
. 나는 $
잠시 후에 갈 것이다 .
일치 항목을 반대로 인쇄하려면 어떻게해야합니까? .NET의 오른쪽에서 왼쪽으로 일치하는 모드를 사용하여 r
. 이것은 정규식 엔진이 일치하는 항목을 찾을 때 문자열의 끝에서 시작하여 뒤로 작동한다는 것을 의미합니다.
마지막으로,이 m
차종 $
일치 a의 끝 라인 대신 문자열의 끝을. 왜 우리는 그것을 필요로합니까? 문제는 .*
불필요한 일치 를 생성 한다는 것 입니다. 정규식 대체를 고려하십시오
s/a*/$0x/
입력에 적용됩니다 baaababaa
. 당신은 이것이 산출 할 것이라고 생각할 것입니다 baaaxbaxbaax
, 그러나 그것은 실제로 당신에게 줄 것 baaaxxbaxxbaaxx
입니다. 왜? aaa
엔진의 커서를 일치 시킨 후 a
와 사이에 있기 때문 b
입니다. 이제 더 이상 일치하지 않을 수 a
의, 그러나 a*
또한 빈 문자열로 만족된다. 즉, 매 경기마다 빈 경기가 다시 발생합니다.
빈 줄이 추가되기 때문에 여기서는 원하지 않습니다. 따라서 일치하는 끝을 포함하도록 요구 하여 관련없는 일치 항목 ( 오른쪽에서 왼쪽 모드로 인해 줄 의 시작 부분 에 있음) 을 버립니다. 라인.
tac
후행 줄 바꿈에 관해서는 조금 이상합니다. 이 변환a\nb\n
에 (뒤 바꿈)b\na\n
와a\nb
로 (후행를 바꿈)ba\n
. 이것이 우리 코드가 어떻게 행동해야합니까?