MatchData에서 begin 및 end 구현 방법

3975 단어 re2

묘사

업데이트된 @driskell's#21(0.6.1 기반).
불행하게도 터미널을 재정비하는 것은 beginend 의 기능을 파괴한 것 같다. 둘 다 상대적으로 정확하지만, 모두 무작위 쓰레기를 포함하는 것 같아 숫자가 나빠질 수 있다.바늘 산수 문제 같은 냄새가 나는데, 좀 볼 수 있을까요, @driskell?

토론 #1

1050 정도에 변화가 하나 부족합니다.
https://github.com/mudge/re2/pull/21/files#diff-e23c54ff6a986f6e4e97f67de7344d98R1122
기본적으로 구조에 저장된 텍스트 문자열은 RE2에 지정된 텍스트 문자열과 동일해야 합니다.RE2는 새 문자열을 반환하지 않고 전달된 문자열의 오프셋 및 길이만 반환합니다.
이 패치에서 RE2는 우리가 저장한 문자열과 다르기 때문에, 두 문자열이 메모리에 있는 거리와 같은 임의의 문자열을 포함할 것이다.

토론 #2

아, 그럼요.너무 좋아요. 놓쳐서 미안해요.
나는 이미 제출을 수정했기 때문에 이것은 보기에 매우 좋다.제출 (한 번 추가 beginend 및 그 규범) 으로 접어서 생성된 문서를 검사하고, 자술한 파일에 공헌을 기록할 수 있다면?

토론 #셋

너무 좋아요. 감사합니다.rb Stru len의 일을 보러 갈 시간이 별로 없지만, 지금은 괜찮을 것이다. 아마도 내가 언제 시작하든지, 아니면 다른 사람이 할 것이다. 나는 확신한다.

토론 #4

우울한 것은rb_str_length 루비2+버전만 있는 것 같다는 것이다.더 호환되는 RSTRING_LEN 를 사용하면 바이트 크기를 다시 되돌릴 것 같습니다. (인코딩을 모를 수도 있습니다.)
Ruby 1.9에 대해서는 # encoding: utf-8에 신기한 주석spec/re2/match_data_spec.rb을 추가해야 한다. 그렇지 않으면 멀티바이트 문자로 인해 이상이 발생할 수 있다.
현의 길이를 더욱 일치시킬 수 있는 다른 생각은 없습니까?아마도 우리는 C 함수를 직접 사용하지 않고 length 호출할 수 있을 것이다.

토론 #5

James Edward Gray's "Bytes and Characters in Ruby 1.8"에서 몇 가지 권장 사항을 사용할 수 있습니다. 즉, "some string".scan(/./mu).size Ruby 버전에서 문자열의 문자 수를 가져오는 것입니다.
이것은 순수 루비에서 가장 좋을 수 있기 때문에, 나는 루비에서 beginend 을 실현하려고 시도했다. 방법은 C API에서 편이량 문자열을 되돌려주고 scan 그것들을 정렬하는 것이다.

토론 #6

죄송합니다. 제가 가리키는 것은 보는 것rb_str_sublen(아니오rb_str_len-그것은 실제로 존재하지 않습니다.)
현재 begin()과 end()는 일치하는 이전 문자를 포함하는 루비 문자열을 실제로 할당하고 있습니다.그리고 rb_str_length를 사용하여 다자 바이트 감지 계수를 한다.rb_str_sublen를 사용하면 Ruby 대상을 분배하지 않은 상태에서 멀티바이트 감지 계수를 할 수 있어 분배를 절약할 수 있다. 왜냐하면 우리는 정수 하나만 되돌려주면 바로 쓰레기가 되기 때문이다.
지금 나는 이 두 개가 모두 Ruby 1.9에서 사용할 수 있다는 것을 확신하지만, 아마도 잘못된 것일 것이다.버튼 좀 눌러줄래요?트라비스가 뭐라고 하는지 볼까?

토론 #7

rb_str_sublenrb_str_length 둘 다 믿을 만해야 한다(Ruby 버전에서 사용할 수 있다고 가정한다)전자만 대상 분배와 실시간 쓰레기를 피할 수 있다.

토론 #8

루비에서 사용beginend 추송은 통과된 구축을 사용했다(그러나 C에서 새로운 until_beginuntil_end:magic comment는 1.9를 복원했지만 루비 Enterprise Edition과 루비 1.8은 모두 부족rb_str_lengthRSTRING_LEN는 바이트만 되돌려준다(전자는 1.9에 도입된 것으로 보인다.http://rxr.whitequark.org/mri/ident?v=1.8.7-p374&i=rb_str_sublen).
1.8버전rb_str_sublen이 있어도 우리는 1.9 이전의 문자 수가 아니라 문자열 크기가 바이트 수에 불과하기 때문에 Regexp 기술을 사용해야 한다고 의심한다.
가능하다면 1.8과 호환성을 유지하고 싶지만 필요하다면 포기할 수 있다고 생각하십니까?

토론 #9

실제로 rb_str_sublenENCODED_STR_NEW宏과 매우 유사)할 수 있다면 RSTRING_LEN를 사용하여 알 수 없는 루비를 인코딩하는 것은 나쁜 생각이 아닐 수도 있다.나는 루비 1.8에 대해 편이량은 바이트이고 >=1.9에 대해서는 문자(그렇기 때문에string[offset..-1]의 행위가 일치해야 한다는 논점을 제기할 수 있다.네, 동의합니다.Ruby 1.8의 경우 길이가 바이트인 경우 begin () end () 는 바이트를 반환해야 합니다.

토론 #10

차이가 많지 않다. 로빈니우스가 부족한 것 같다

토론 #11

. 비록 설정이 있지만rb_str_sublen.만약 다른 문자열 함수가 모두 자리에 앉았다면, 부족한 실현을 넣을 수 있습니다.그렇지 않으면 언제든지 변경 사항을 확인하고 당신의 생각을 알려 주십시오.HAVE_RUBY_ENCODING_H LGTM, 감사합니다!rb stru sublen이 일하는 것을 보니 매우 기쁩니다.틀림없이 나의 원시 작업 복사본에서 뭔가 이상하다/이상한 곳이 그것을 망가뜨렸다.
루빈니우스에 관해서는 확실하지 않습니다.최악의 경우, 그것은 내가 처음에 했던 것처럼 루비 문자열을 나누어 계산하고 버릴 것이다.그러나 rb str sublen을 재구성할 수 있는 경우에도 이 기능이 사용됩니다.아마도 이런 코드도 루빈니우스에게 미루어야 하는지 볼 만할 것이다.

토론 #12

드디어!다 지나갔어.나는 역사를 더욱 선형적인 것으로 압축하여 자술한 파일을 업데이트하고 마스터에 통합하여 0.7.0을 내놓았다.
참아줘서 고마워.

좋은 웹페이지 즐겨찾기