2010-07-17 2 views
2

는 사용자가 블로그에이 의견 제출 말 :Ruby 문자열에서 URL 및 하이퍼 링크 발생 횟수를 계산하는 방법은 무엇입니까?

@SO - 위대한 커뮤니티, 그러나 우리는 가 Stack Overflow에서 훌륭한 사회를 볼 수도했습니다. 동시에 Google의 Gmail (http://gmail.com)은 끝없는 경계가있는 커뮤니티의 훌륭한 예인 입니다. 나는 단지 사람이 와 같은 무언가를 toe-toe로 갈 것인지 궁금합니다. http://www.twitter.com과 같은 것입니다. 당신은 어떻게 생각하십니까?

참고 : 3 URL을 실제로 일반 텍스트로 게시하지만, SO 하이퍼 링크로 변환되었습니다. 어떻게 루비 문자열에 URL을 하이퍼 링크의 발행 수의 수를 계산하기 :

어쨌든, 총 URL 및 하이퍼 링크 수는 루비 및/또는 루비 온 레일즈 관점에서 그래서 3

이어야한다 ?

답변

0

가장 쉬운 방법은 "HTTP"패턴을 검색하는 것입니다,하지만 때로는 URL은 'http : //'도착하지 않았기 때문에 실제로는 더 복잡 할 수 정기적으로 사용 beggining

string = "@SO - Great community, but we've also seen some great communities at <a href='http://blabla'>Stack Overflow</a>. At the same time Google's Gmail (http://gmail.com) is a great example of a community with endless bounds. I'm just wondering if anyone will really go toe-to-toe with something like http://www.twitter.com. What do you think?" 
string.scan(/http/).size #=> 3 
0

에서 표현은 좋은 방법입니다. 여기에 그 작업을 수행하는 방법에 대한 예입니다

yourpost.each do |yourword| 
    if yourword =~ /^(((ht|f)tps?\:\/\/)|~/|/)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5})(:[\d]{1,5})?)/?(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&\w+=\w+)*)?/ 
      puts %Q!We found #{$&} an URL in #{$1}! 
    end 
end 

이 URL을 일치하는 정규 표현식에 대한 자세한 논의 this 게시물을 참조하십시오.

+0

이 방법은 "www.google.com"을 올바르게 계산합니까? –

+0

mmmm ... 확실하지 않습니다. 링크를 확인하십시오. 그것은 regexps와 URL 검색에 대한 많은 토론을했습니다. –

1

이 상대적으로 순진이기는하지만, 아주 간단하다, 그러나 그것은 합리적인 가정이 될 수 있습니다 "// HTTP"물론

string.count("http://") 

, 그것은 선도적없이 링크를 선택하지 않습니다.

+0

OUPS :'string.count ("http : //")'# => 54 – fl00r

+0

기여 해줘서 고맙지 만, 당신의 방법이 조금 순진하다는 점에서 옳다. "https : //"사례는 어떻습니까? 아니면 단순한 "www. *"사례입니까? –

관련 문제