2016-11-28 11 views
0

주어진 입력 문자열에 대해 프롤로그에서 정규 표현식과 유사한 표현식을 찾으려고합니다.프롤로그에서 주어진 reg 표현식에 대한 문자열을 일치시키는 방법은 무엇입니까?

match_function([_$]?[a-z]|[a-z][a-z_]*[a-z],"+ab_c"). 
false 
match_function([_$]?[A-Z]|[A-Z][A-Z_]*[A-Z],"+AB_C"). 
... 

이 경우 어떻게 접근해야합니까? . 마찬가지로 첫 번째 인수를 분할하고 패턴 일치를 사용하여 문자열의 각 요소를 하나씩 검사 할 수 있습니까? something

match([_$],[X|Xs]):- 
member(X,"_$"). 
    match_next(NEXT_ELMENT_IN_THE_STRING)... 

답변

0

방금하고 싶은 작업을위한 것이라면 기존 정규 표현식 라이브러리를 사용하십시오. pack_install(regex)을 실행하여 설치할 수있는 SWI-Prolog가 있습니다.

다른 이유로 인해 구현해야하는 경우 먼저 정규식을 구문 분석하여 처리하기 쉬운 표현으로 진행 한 다음이를 사용하여 match 술어를 작성해야합니다. DCG는 두 부분 모두에 유용해야합니다.

예를 들어이 [_$]?[a-z]|[a-z][a-z_]*[a-z]의 정규식은 완전한 초보자 경우 다음

match(one_of(Chars)) --> 
    [C], 
    { member(C, Chars) }. 

같은 규칙 문자의 목록에 대해 일치 할 수있는

choice(sequence([option(one_of(['_', '$'])), range(a, z)]), 
     sequence([range(a, z), any(one_of([range(a, z), '_']), range(a, z)])) 

같은 용어로 전환 될 수있다 , 이것은 쉽지 않을 것이지만, 우리는 구체적인 문제를 도와 드리겠습니다!