vim 정규표현식에서 or(\|) 사용하기


vim의 정규표현식에서 or\| , 역슬래쉬버티컬바로 나타낸다or(\|)은 다음과 같은 형식으로 쓴다


문자열1\|문자열2 문자열1이거나 문자열2와 일치한다.


가령, 탐색하는 문자열이 cat이거나 dog이라면 그 정규표현식은 다음과 같다.


cat\|dog


어떤 문자열 중에 첫 번째 글자가 대문자인지 소문자인지 여부와 상관없이 모두 찾고자 하면 보통 문자 클래스를 이용한다. 가령 Catcat을 동시에 찾고 싶다면 문자 클래스를 이용하여 다음과 같이 작성하면 된다.

 

[Cc]at Cat와 cat를 모두 찾는다.


이와 비슷한 표현을 조금 복잡하지만 or(\|)로 다음과 같이 할 수 있다.


\(C\|c\)at 

→ \( \) 사이에 C\|c 를 배치해서 Cat와 cat를 모두 찾는다.


\(\) 로 인하여 매우 복잡하게 보인다. 그냥 문자 클래스([ ])로 쓰는 것이 편하지 않을까? 앞에 보여준 예에서는 단 한 개의 글자가 대문자이거나 소문자인 것을 선택하는 것이므로 문자 클래스([ ])가 더 쓰기 편하다. 하지만 여러 개의 문자열 중 하나를 선택할 경우에는 or(\|)\(\) 사이에 배치하는 편이 더 쓰기 편하다.

 

가령, 다음과 같은 일련의 파일 이름에서 cat.jpg, anmimal.jpg, dog.jpg 에만 해당하는 정규표현식은 다음과 같다.


cat.jpg

cat.avi

animal.jpg

animal.avi

dog.jpg

dog.avi


\(cat\|animal\|dog\)\.jpg


역슬래쉬점(\.)은 점(.)을 어떤 임의의 한 개의 문자를 의미하는 특수한 용도로 사용하지 말고 점(.) 문자 그 자체로만 인식하라는 의미


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 



문서는 Anki 2.0 유저 매뉴얼을 번역한 문서입니다.


기본적으로 구글 번역을 통해서 초벌을 번역하고 이를 수정하는 방식으로 번역했습니다. 


또한, 본문에 충실한 직역보다는 매뉴얼을 숙지하기 쉽도록 의역 위주로 번역하였습니다.


 


Anki 매뉴얼 전체 개요 페이지 가기




Browser

 

 

 

 Searching(검색)

 

 

검색창은 카드 목록 위에 있다.

 

카드 검색을 위해 검색창에 여러 가지를 입력 할 수 있다.

 

 

 

검색창을 통한 입력이 아니라 단순히 찾고자하는 것을 리스트에서 택하는 방식을 선호한다면 사이드바 섹션을 살펴보면 된다.

 

 

 

 

Simple searches(단순검색)

 

검색창에 텍스트를 입력하면 Anki가 검색어와 일치하는 노트를 찾아 이 노트의 카드들을 표시한다.

 

Anki는 노트의 모든 필드를 대상으로 검색하지만 태그를 검색하지 않는다(이 부분은 추후 설명).

 

다음은 몇 가지 예이다.

 

 

dog

 

"dog"을 검색하면 "doggy""underdog"과 같은 단어를 찾는다.

 

 

dog cat

dogcat을 그냥 공백으로 띄어서 작성하면 And 조건으로 노트를 검색하므로 노트의 필드에 "dog""cat"이 동시에 있어야 한다.

 

, 노트의 하나의 필드에 검색어가 전부 같이 있어야 할 필요는 없고, 하나의 노트에 속한 여러 필드에 "dog""cat"이 있으면 된다.

 

 

dog or cat

"dog"이나 "cat" 중 하나 이상을 가진 노트를 찾는다.

  

 

dog (cat or mouse)

 

노트에서 dogcat이 동시에 있거나, “dogmouse가 동시에 있는 경우를 찾는다

 

 

-cat

 

단어 "cat"이 없는 노트를 찾는다

  

 

-cat -mouse

"cat""mouse"도 없는 노트를 찾는다.

 

 

-(cat or mouse)

 

위와 동일하게 "cat""mouse"도 없는 노트를 찾는다.

  

 

"a dog"

 

정확히 "a dog"인 어구를 가진 노트들을 찾는다.

 

 

-"a dog“

정확히 "a dog"인 어구를 가지지 않은 노트들을 찾는다.

  

 

d_g

 

dog, dig, dug 등과 같이 3개의 글자가 d, 임의의 한글자g인 노트들을 찾는다.

 

  

d*g

 

dg, dog, dung 등과 같이 어떤 글자의 구성이 d임의의 연속적인 여러 글자와 g인 노트들을 찾는다.

(위의 경우와 달리 글자수 제한이 없다.)

  

  

<단순 검색시 참고 사항>

 

1. 검색어는 공백으로 구분된다.

 

2. 여러 검색어가 제공되면 Anki모든 검색어에 일치하는 노트를 찾는다.(단순 공백일 경우 AND 조건으로 해석하기 때문)

 

3. 검색어들 중 하나만 일치해도 되는 노트들을 검색하고 싶으면 "or"을 사용한다.

 

4. 검색어의 앞에 마이너스 기호(-)를 붙이면 해당 검색어가 포함되어 있지 않은 노트들을 찾을 수 있다.

 

5. 공백이나 괄호 등이 포함된 검색어는 따옴표로 묶어서 검색하면 된다.

 

6. 검색어는 dog (cat or mouse) 예제처럼 괄호 안에 위치시켜 그룹화 할 수 있다. 이는 OR AND 검색을 결합할 때 중요하다. 예를 들어, 괄호를 사용하여 dog (cat or mouse)라고 검색하면 dogcat이 동시에 있거나, “dogmouse가 동시에 있는 경우의 노트들을 검색하지만 괄호가 없으면 dog cat or mouse 라고 검색창에 입력되고 이는 dog AND cat OR mouse로 검색하게 된다.

 

7. Anki에서는 정렬필드가 아닌 필드에서 검색할 때는 서식이 문제가 된다. 정렬필드의 단어는 서식과 상관없이 해당 내용을 검색으로 찾을 수 있다. 하지만 정렬필드가 아닌 필드의 단어의 경우 약간 복잡하다. 예를 들어, 필드 중 하나에 "example"과 같이 일부 글자의 서식이 다른 단어를 추가하면 해당 필드가 정렬 필드가 아니라면 "example"과 같이 서식을 지정하지 않고 검색할 때 이 필드의 내용을 찾아내지 못한다. 단어에 서식이 사용되지 않았거나 단어의 서식이 "example"과 같이 중간에 변형되지 않았다면 이 단어는 어떤 필드에 있든지 간에 검색을 통해서 발견할 수 있다.




Anki 매뉴얼 전체 개요 페이지 가기



문서는 Anki 2.0 유저 매뉴얼을 번역한 문서입니다.


기본적으로 구글 번역을 통해서 초벌을 번역하고 이를 수정하는 방식으로 번역했습니다. 


또한, 본문에 충실한 직역보다는 매뉴얼을 숙지하기 쉽도록 의역 위주로 번역하였습니다.


 


Anki 매뉴얼 전체 개요 페이지 가기




Cards and Templates

 

 

 

 Conditional Replacement(조건부 대체)

 

 

하나의 필드가 비어있는지 아니면 비어있지 않은지 여부를 이용하여 카드에 특정 텍스트, 필드, HTML을 포함시킬 수 있다.

 

아래의 사례를 보자.

 

      This text is always shown.

 

      {{#FieldName}}

      This text is only shown if FieldName has text in it

      {{/FieldName}}

 

      {{^FieldName}}

      This text is only shown if FieldName is empty

      {{/FieldName}}

 

카드의 템플릿에 텍스트를 입력하면 해당 텍스트는 항상 보이게 된다. 그래서 가장 위의 "This text is always shown."은 항상 카드에 노출된다.

 

반면, {{#FieldName}} 텍스트 {{/FieldName}}의 형식으구성되어 있을 경우 {{#FieldName}}{{/FieldName}} 사이에 있는 텍스트FieldName이라는 필드에 무언가 텍스트가 입력되어 있어야만 카드에 나타난다.

 

또한, {{^FieldName}} 텍스트 {{/FieldName}}의 형식으구성되어 있을 경우 {{^FieldName}}{{/FieldName}} 사이에 있는 텍스트FieldName이라는 필드에 어떤 텍스트도 입력되어 있지 않아야만 카드에 나타난다.

 

즉, FieldName이라는 필드 내에 텍스트가 입력되어 있는지 여부를 조건으로 하여 카드에 나타나는 텍스트의 종류를 변경할 수 있는 것이다.

 

아래에 이 사례를 보면 제대로 작동한다는 사실을 알 수 있다.

 

 

 

보통 이런 조건부 대체는 아래와 같이 필드가 비어있지 않은 경우에 해당 레이블을 표시하는 경우가 다반사이다.

 

 

             {{#Tags}}Tags: {{Tags}}{{/Tags}}

 

 

이런 경우도 생각해볼 수 있다.

 

Anki는 단순히 카드의 앞면을 보고 뒷면을 떠올리는 과정이지만 간혹, 뒷면에 일종의 메모노트를 남겨서 학습의 질을 높이기도 한다.

 

그래서 카드의 뒷면 템플릿에만 사용하는 노트 필드를 만들어서 해당 노트에 메모를 남길 수 있다.

 

보통 이런 메모노트가 있다는 것은 카드 앞면을 보고 답을 생각할 때 더 깊이 생각해보아야 한다는 표시일 수도 있다.

 

그렇다면 이런 사실을 환기하기 위해 카드 뒷면에 별도의 메모노트가 있다는 표시를 카드 앞면에 해주는 것도 좋을 것이다.

 

그렇다면 카드의 뒷면에 메모노트가 있을 경우 앞면의 필드를 파란색으로 지정하면 사용자가 카드의 앞면에 나타난 파란색 필드를 보고 메모노트의 종류를 인지하여 좀 더 깊이 생각해볼 수 있을 것이다.

 

다음과 같이 하면 필드의 스타일을 지정할 수 있다.

 

        {{#Notes}}<span style="color:blue;">{{/Notes}}

      {{FieldToFormat}}

      {{#Notes}}</span>{{/Notes}}

 

그럼 사례를 들어보자.

 

각각의 수도를 외우는데 캐나다의 경우 수도가 오타와이지만 보통 몬트리올로 생각하는 경우가 상당수 있다.

 

그래서 카드 앞면에 질문은 "캐나다의 수도는?" 이고 뒷면의 해답은 "오타와" 라고 적는다.

 

동시에 메모노트에 "몬트리올로 오해하는 경우가 많음"이라고 작성하여 사용자가 한번 더 생각해보도록 요구하고 흔히 하는 실수를 마음에 새기게 해볼 수 있다.

 

일단, 기본 노트유형에 Notes 필드를 추가하여 노트유형을 새로 만들고 위에 언급한 문항을 만든 후 카드창을 열어 템플릿을 보면 다음과 같다.

 

 

 

여기에 앞면 필드의 질문을 카드 뒷면 템플릿의 노트 필드에 텍스트가 입력되었는지 여부에 따라서 조건부로 파란색 글씨로 서식을 바꾸면 다음과 같이 나타남

 

 

 

 

또한 이런 조건부 대체를 이용하면 노트에서 어떤 카드들을 생성할지 제어할 수 있다.

 

앞의 카드 생성과 삭제 섹션을 떠올려 보자.

 

Anki는 카드 앞면이 비어있는 카드를 생성하지 않는다.

 

예를 들어 앞면에 ExpressionNotes의 두 개의 입력 필드가 있는 카드를 생각해보자.

 

그럼 카드의 앞면 템플릿이 다음과 같을 것이다.

 

       {{Expression}}

       {{Notes}}

 

이러면 일반적으로 Expression 필드나 Notes 필드의 한쪽이나마 텍스트가 있는 경우 카드가 생성될 것이다.

 

하지만 이를 Expression 필드가 비어있지 않은 경우에만 카드를 생성하게 하려면 템플릿을 다음과 같이 변경하면 된다.

 

          {{#Expression}}

       {{Expression}}

       {{Notes}}

       {{/Expression}}

 

두 필드가 모두 채워져 있는 경우에 카드를 생성하게 하려면 다음과 같이 하면 된다.

  

       {{#Expression}}

       {{#Notes}}

       {{Expression}}

       {{Notes}}

       {{/Notes}}

       {{/Expression}}

 

카드 생성과 삭제 섹션에서 언급한 바대로 카드생성을 제어하려면 조건부 대체를 카드 앞면에 위치시킬때만 작동한다.

 

카드 뒷면에 이렇게 하면 그저 뒷면이 비어 있는 카드로 생성되고 만다.

 

조건부 대체로 카드의 생성을 제어하는 것은 앞면의 필드가 모두 비어있는지 여부를 제어함으로써 가능하므로 항상 앞면 템플릿의 모든 필드를 조건부 대체로 감싸야 정확하게 작동한다.

 

다음과 같은 사례는 Notes 필드가 조건부 대체로 감싸지 않은 사례로 아마도 기대한 바대로 작동하지 않을 것이다.

 

       {{#Expression}}

       {{Expression}}

       {{/Expression}}

       {{Notes}}

 

 

우리는 필드를 나열할 때 기본적으로 "OR" 조건으로 생각한다.

 

즉, 첫번째 필드가 비어있지 않거나 두번째 필드가 비어있지 않거나  등등의 사유로 카드가 생성된다고 생각한다.

 

하지만 "OR" 조건이 아니고 "AND" 조건일 수도 있다.

 

즉, 첫번째 필드와 두번째 필드가 모두 비어있지 않을 경우에만 카드가 생성되는 것이다.

 

 

<주의사항>

 

Anki는 현재 AND 및 OR 조건을 혼합할 수 없다.

 

따라서 "Expression" 필드와 "Notes" 필드 또는 "Field 3" 를 요구하는" 다음의 템플릿은 작동하지 않는다.

 

       {{#Expression}}

       {{#Notes}}

       {{Expression}}

       {{Notes}}

       {{/Notes}}

       {{/Expression}}

       {{Field 3}}

 

그리고 또 다른 주의사항으로 부정적인 표현들은 카드생성을 제어하는데 사용할 수 없다는 점이 있다.

 

템플릿에 {{^Field}}를 배치하면 기대한 바대로 작동하지 않을 것이다.



Anki 매뉴얼 전체 개요 페이지 가기



+ Recent posts