[C#] C # 문자열에서 URL을 하이퍼 링크로 변환하는 가장 쉬운 방법은 무엇입니까?


Answers

정규 표현식은 아마도 이런 종류의 작업을하는 친구 일 수 있습니다.

Regex r = new Regex(@"(https?://[^\s]+)");
myString = r.Replace(myString, "<a href=\"$1\">$1</a>");

일치하는 URL에 대한 정규 표현식은 약간의 작업이 필요할 수 있습니다.

Question

Twitter API를 사용하고 있으며 모든 URL을 하이퍼 링크로 변환하려고합니다.

가장 효과적인 방법은 무엇입니까?

...에서

string myString = "This is my tweet check it out http://tinyurl.com/blah";

This is my tweet check it out <a href="http://tinyurl.com/blah">http://tinyurl.com/>blah</a>



정규식과 함께 MatchEvaluator 대리자 함수를 사용하여이 컨트롤을 추가 할 수 있습니다.이 문자열이 있다고 가정합니다.

find more on http://www..com 

지금이 코드를 사용해보십시오.

private void ModifyString()
{
    string input = "find more on http://www.authorcode.com ";
                Regex regx = new Regex(@"\b((http|https|ftp|mailto)://)?(www.)+[\w-]+(/[\w- ./?%&=]*)?");
                string result = regx.Replace(input, new MatchEvaluator(ReplaceURl));
}

static string ReplaceURl(Match m)
{
    string x = m.ToString();
    x = "< a href=\"" + x + "\">" + x + "</a>";
    return x;
}



/ RedWolves의 응원

from : this.replace (/ [A-Za-z] + : // [A-Za-z0-9- ] +. [A-Za-z0-9- : % & \ π /.=] + / , 함수 (m) {...

/ [A-Za-z] + : // [A-Za-z0-9- ] +. [A-Za-z0-9- : % & \ λ /.=] + /

주소 "anyprotocol"에 대한 코드가 있습니다 : // "anysubdomain / domain". "anydomain 확장 및 주소",

문자열 조작의 다른 용도에 대한 완벽한 예입니다. .replace와 함께 임의로 슬라이스 앤 다이스 할 수 있으며, 필요할 경우 적절한 "a href"를 삽입 할 수 있습니다.

jQuery를 사용하여 .link 메소드로 사용자 정의 할 수 없더라도 컨텐츠로드 로직에서 "target = _blank"로 쉽게 링크를 변경할 수 있습니다.

개인적으로 문자열 필터링 (String.prototype.linkify 선언)에 대한 문자열 개체에 대한 사용자 지정 메서드에 대한 tacking을 좋아하지만 대규모 환경에서 어떻게 실행되는지는 잘 모르겠습니다. 10 개 이상의 사용자 정의 linkify와 같은 기능을 구성해야합니다. 나는 그 시점에서 코드 구조를 가지고 뭔가 다른 것을해야 할 것이라고 생각한다.

어쩌면 수의사가 여기에 비틀 거리고 우리를 계몽 할 것입니다.




이것은 실제로 추악한 문제입니다. URL은 구두점을 포함 할 수 있으며 구두점으로 끝날 수 있으므로 URL이 실제로 끝나는 위치 (일반 텍스트에 포함 된 경우)를 판별하기 어려울 수 있습니다. 예 :

http://example.com/.

유효한 URL이지만 문장의 끝이 될 수도 있습니다.

I buy all my witty T-shirts from http://example.com/.

공백이 발견 될 때까지 구문 분석 할 수 없습니다. 왜냐하면 공백을 URL의 일부로 유지하기 때문입니다. 마침표 나 공백이 발견 될 때까지는 구문 분석을 할 수 없습니다. 마침표는 URL에서 매우 일반적이기 때문입니다.

예, 정규식은 여기 당신의 친구지만, 적절한 정규 표현식을 만드는 것은 어려운 부분입니다.

이것도 확인해보십시오. .NET에서 Regex로 URL 확장하기 .




jqueryJSON API를 사용하는 것과 똑같은 일을했습니다. linkify 함수는 다음과 같습니다.

String.prototype.linkify = function() {
    return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(m) {
        return m.link(m);
    });
 };