차트 ruby-appeendix-V(rubular)

7355 단어 rubularRubyregexp
! Mac OS X-10.15.7 ! ruby-2.7.1p83

정규 표현식 regular expression


텍스트 정보를 검색하는 데 편리한 도구는 정규 표현식입니다. 기억하고 싶어서 좌절한 적이 있습니까?나는 10년 이상 RegExp를 쓰지 못하고 여러 권의 책을 시도하다가 중도에 포기했다. 하지만 http://rubular.com 겨우 10분 만에 사용할 수 있었다. 비결은 역시 TDD였다.

rubular



트레일러 화면
Rublar 화면을 보십시오. 맨 위에 정규 표현식을 넣으십시오. 왼쪽 아래에 테스트 string을 넣으십시오. 이렇게 하면 오른쪽에서 결과를 추출할 수 있습니다.
우선 테스트 문자열로
line = '* fix calc kpoints:50, in_plane:0.98, vertical:1.00'
문제를 사고하다.
지금부터 수치의 배열 [0.981.00]을 꺼냅니다. 우선 꺼낸 문자열은
(.+)
'.'등, 1개 이상의 표시(+)를 넣었습니다. 앞으로 여분의 문자를 없애는 것을 고려해 보십시오. 조금만 시도해 보시면,
: in_plane:(.+), vertical:(.+)
왜 수치만 나오지? 
일반적으로 정규적 표현은 많은 것을 기억해야 한다고 생각하지만, Regex quick reference에서 정리한 요소로만 구성되어 있다. 대체적으로 분류하면,
  • 범위 지정(왼쪽 열),
  • 위치 지정 하위(왼쪽 열)
  • 문자 지정 하위(중열)
  • 양지자(오른쪽 열)
  • 그리고 동그란 괄호 () 를 덧붙여 제련한다. 그리고 그 싱어를 보면서 더듬어 보자. 어때, TDD지?

    이용 방법


    루피에 합병하려면,
    line = "* fix calc kpoints:50, in_plane:0.98, vertical:1.00"
    
    string = Regexp.new("\\* fix calc kpoints:50, in_plane:(.+), vertical:(.+)")
    line =~ string
    p [$1.to_f, $2.to_f] #=> [0.98, 1.00]
    
    res = line.scan(string)
    p res #=> [["0.98", "1.00"]]
    p res[0].map(&:to_f) #=> [0.98, 1.0]
    
    p m = line.match(string) 
    #=> #<MatchData "* fix calc kpoints:50, in_plane:0.98, vertical:1.00" 1:"0.98" 2:"1.00">
    p [m[1].to_f, m[2].to_f] #=> [0.98, 1.0]
    
    등등, 각각의 특징이 있지만 어떤 것을 써도 순조롭게 진행될 때 순조롭게 진행될 수 있다.

    관련regexp


    게다가 최근 눈에 띄는 수법으로 패치도 했다.
    string = Regexp.new('in_plane:(?<x>.+), vertical:(?<y>.+)')
    res = line.match(string)
    => #<MatchData "in_plane:0.98, vertical:1.00" x:"0.98" y:"1.00">
    irb(main): > res[:x]
    => "0.98"
    irb(main): > res[:y]
    => "1.00"
    
    :x 또는 :ysymbol로 찾을 수 있습니다.
    "=~"이면
    irb(main):001:0> line = '* fix calc kpoints:50, in_plane:0.98, vertical:1.00'
    => "* fix calc kpoints:50, in_plane:0.98, vertical:1.00"
    irb(main):003:0> /in_plane:(?<x>.+), vertical:(?<y>.+)/ =~ line
    => 23
    irb(main):004:0> x
    => "0.98"
    irb(main):005:0> y
    => "1.00"
    
    해당 이름의 로컬 변수입니다.
    저기, 수치를 뽑을 때scanf("%i,%f")도 편리해요.
    p line.scanf("* fix calc kpoints:50, in_plane:%f, vertical:%f")
    #=>[0.98, 1.0]
    
    C 언어와 같은format.regexp로 꺼내면 문자열, tof 또는 toi로 flat, int로 변환해야 하며,scanf로 꺼낸 후 type으로 꺼냅니다.

  • source ~/git_hub/ruby_docs/chart_style_ruby/c05_rubular.org
  • 좋은 웹페이지 즐겨찾기