수색…


통사론

  • 정규식 ( "[정규식]")
  • r "[정규식]"
  • 경기 (바늘, 건초 더미)
  • 매치 올 (바늘, 건초 더미)
  • 각 매치 (바늘, 건초 더미)
  • ismatch (바늘, 건초 더미)

매개 변수

매개 변수 세부
needle haystack 에서 찾을 Regex 표현
haystack needle 을 찾을 텍스트

정규 표현식 리터럴

Julia는 정규 표현식을 지원합니다 1 . PCRE 라이브러리는 정규 표현식 구현으로 사용됩니다. 정규 표현식은 언어 내에서 미니 언어와 같습니다. 대부분의 언어와 많은 텍스트 편집기가 정규 표현식을 지원하기 때문에 문서와 정규 표현식 사용 예제는이 예제에서 다루지 않습니다.

생성자를 사용하여 문자열에서 Regex 를 생성하는 것이 가능합니다 :

julia> Regex("(cat|dog)s?")

그러나 편리하고 쉬운 이스케이프를 위해 대신 @r_str 문자열 매크로를 사용할 수 있습니다.

julia> r"(cat|dog)s?"

1 : 기술적으로 Julia는 정규 표현 을 언어 이론에서 정규 표현 이라 부르는 것보다 뚜렷하고 강력합니다. 자주 "정규 표현식"이라는 용어는 정규 표현식을 참조하는데도 사용됩니다.

일치하는 항목 찾기

정규식에는 네 가지 기본 유용한 함수가 있으며, 모두 needle, haystack 순서로 인수를 취합니다. "바늘"과 "건초 더미"라는 용어는 영어 관용구의 "건초 더미에서 바늘 찾기"에서 유래했습니다. 정규 표현식의 맥락에서 정규 표현식은 바늘이며 텍스트는 건초 더미입니다.

match 함수는 문자열에서 첫 번째 일치 항목을 찾는 데 사용할 수 있습니다.

julia> match(r"(cat|dog)s?", "my cats are dogs")
RegexMatch("cats", 1="cat")

matchall 함수는 문자열에서 정규 표현식의 모든 일치를 찾는 데 사용할 수 있습니다.

julia> matchall(r"(cat|dog)s?", "The cat jumped over the dogs.")
2-element Array{SubString{String},1}:
 "cat" 
 "dogs"

ismatch 함수는 문자열 내에 일치하는 것이 있는지 여부를 나타내는 부울을 반환합니다.

julia> ismatch(r"(cat|dog)s?", "My pigs")
false

julia> ismatch(r"(cat|dog)s?", "My cats")
true

eachmatch 함수는 for 루프 와 함께 사용하기에 적합한 RegexMatch 객체에 대한 반복자를 반환합니다.

julia> for m in eachmatch(r"(cat|dog)s?", "My cats and my dog")
           println("Matched $(m.match) at index $(m.offset)")
       end
Matched cats at index 4
Matched dog at index 16

그룹 캡처

캡처 그룹에서 캡처 한 부분 문자열은 인덱싱 표기법을 사용하여 RegexMatch 개체에서 액세스 할 수 있습니다.

예를 들어, 다음 정규식은 (555)-555-5555 형식으로 작성된 북미 전화 번호를 구문 분석합니다.

julia> phone = r"\((\d{3})\)-(\d{3})-(\d{4})"

텍스트에서 전화 번호를 추출하려고한다고 가정합니다.

julia> text = """
       My phone number is (555)-505-1000.
       Her phone number is (555)-999-9999.
       """
"My phone number is (555)-505-1000.\nHer phone number is (555)-999-9999.\n"

matchall 함수를 사용하여, 스스로 일치하는 부분 문자열의 배열을 얻을 수 있습니다 :

julia> matchall(phone, text)
2-element Array{SubString{String},1}:
 "(555)-505-1000"
 "(555)-999-9999"

그러나 지역 번호 (괄호로 묶인 처음 세 자리)에 액세스하려고한다고 가정합니다. 그런 다음 eachmatch 반복자를 사용할 수 있습니다.

julia> for m in eachmatch(phone, text)
           println("Matched $(m.match) with area code $(m[1])")
       end
Matched (555)-505-1000 with area code 555
Matched (555)-999-9999 with area code 555

지역 코드가 정규 표현식의 첫 번째 캡처 그룹이기 때문에 m[1] 사용합니다. 함수를 사용하여 전화 번호의 세 가지 구성 요소 모두를 튜플로 가져올 수 있습니다.

julia> splitmatch(m) = m[1], m[2], m[3]
splitmatch (generic function with 1 method)

그런 다음 특정 RegexMatch 이러한 함수를 적용 할 수 있습니다.

julia> splitmatch(match(phone, text))
("555","505","1000")

또는 각 경기에서 map 를 만들 수 map .

julia> map(splitmatch, eachmatch(phone, text))
2-element Array{Tuple{SubString{String},SubString{String},SubString{String}},1}:
 ("555","505","1000")
 ("555","999","9999")


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow