2013-02-24 3 views
-3

저는 블록의 인수와 그 인수의 모든 인스턴스를 일치시키는 정규식을 개발하려고했습니다.정규식 루비 블록 인수와 블록 내의 모든 인스턴스

이 예제를 사용 :

File.open(inFile).each do |line| 
    line.chomp! 
    if line.empty? then 
     next 
    elsif line =~ /^>/ 
     line.slice!(/>/) 
     names.push(line) 
    elsif line !~ /^>/ 
     seqs.push(line) 
    end    
end 

나는 파이프, lineline의 모든 인스턴스 사이에 단어와 일치하고 싶습니다. 인수를 일치

은 간단하다 :

(?<=\|)(\w*?)(?=\|) 

하지만 문서의 나머지 부분에 대한 패턴으로이 경기를 사용하는 방법을 정말 확실입니다.

진행 방법에 대한 의견을 환영합니다.

(편집 2 :... 나는 전체 문서의 모든 인스턴스를 일치하고자하는이 간단한 질문 재 - 검토 고려하시기 바랍니다 이제 블록에 정규식의 범위를 제한 관심 아닙니다)

(편집 :이 정규식을 textmate/sublime에 대한 tmLanguage 파일에 통합하려고합니다.이 방법은 인수와 모든 인스턴스가 같은 색입니다.이 작업을 수행 할 수있는 플러그인을 만드는 방법이있을 것이라고 확신합니다. 아직 시도하지 않았다. 숭고한 플러그인 bracketHighlighter이 어떻게 작동하는지 보지 못했다.)

+1

이 질문에 대한 답변을 얻으려면 테스트 데이터와 예상 출력을 제공해야합니다. – iain

+0

원본 출력물에 예상 출력이 명시되어 있습니다. – AGS

+1

나는 아무 것도, 그러므로 요구를 보지 않는다. – iain

답변

2

그렇게하지 마십시오. 진지하게. 안정적으로 작동하지 않으므로 손으로 변경하는 것보다 결과를 교정하고 수정하는 데 더 많은 시간을 할애해야합니다.

+0

나는 동의한다, 그것은 이상적이 아니다. 노력에 대한 나의 논리를 설명하기 위해 내 게시물을 편집 할 것입니다. 감사 글렌. – AGS

+1

'line'이 나타날 수있는 모든 상황을 생각해보십시오. 이제는 모든 장소'end'가 나타날 수 있습니다. 잠재적 인 {} 쌍을 염두에 두지 마십시오.정규 표현식 안에 Ruby 언어 구문 분석기를 작성하려고합니다. 특정 상황으로 인해 가정을 크게 단순화하지 않는 이상 희망이 없습니다. –

+0

의견에 감사드립니다. 편집 된 질문을 검토해보십시오. 이제는 전체 문서 전체에서 인수와 일치하는 것으로 보입니다. – AGS

0

는 루비 언어 번들 내부의 모양과 이름이 이미 일치를 할당되었습니다 확인할 경우, 첫 번째 부분이 이미 완료되었습니다 확인할 수있는 것들 :

name: variable.other.block.ruby 
match: [_a-zA-Z][_a-zA-Z0-9]* 

당신은 블록을 참조하는 이름을 사용할 수 있습니다 로컬 바르, 아마 source.ruby.variable.other.block.ruby. 다중 인수 목록의 여러 일치를 어떻게 참조 할 지 잘 모르겠습니다. 당신이 언어 자체보다는 파일에서 입력을 구문 분석하려고하는 것을 매우 불분명하기 때문에

나는 질문에 downvote하겠습니다.