앵커가없는 페이지에 URL에 대한 올바른 Regex를 작성하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/878957

문제

나는 모든 URL과 같은 것을 자르고 싶다 (http : // ....) 앵커로 교체하십시오 <a></a> 그러나 내 요구 사항 : 앵커와 페이지 정의 (Doc Type)를 터치하지 마십시오.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

그래서 URL이있는 일반 텍스트 만 찾아야합니다 ...

내 렌더링 페이지를 무시하려고 노력하고 있으며 BrowserAdapter를 만들었습니다.

<browser refID="default">
    <controlAdapters>
        <adapter controlType="System.Web.Mvc.ViewPage"
                 adapterType="Facad.Adapters.AnchorAdapter" />
    </controlAdapters>
</browser>

다음과 같이 보입니다.

public class AnchorAdapter : PageAdapter
{
    protected override void Render(HtmlTextWriter writer)
    {
        /* Get page output into string */
        var sb = new StringBuilder();
        TextWriter tw = new StringWriter(sb);
        var htw = new HtmlTextWriter(tw);

        // Render into my writer
        base.Render(htw);

        string page = sb.ToString();
        //regular expression 
        Regex regx = new Regex("http://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", RegexOptions.IgnoreCase); 

        //get the first match 
        Match match = regx.Match(page); 

        //loop through matches 
        while (match.Success)
        {

            //output the match info 
            System.Web.HttpContext.Current.Response.Write("<p>url match: " + match.Groups[0].Value+"</p>");

            //get next match 
            match = match.NextMatch();
        }

        writer.Write(page);
    }
}
도움이 되었습니까?

해결책

URL을 약간 미리 검색하기 위해서는 인용문이 있는지 확인하기 만하면 누군가가 인용 된 URL을 일반 텍스트로 붙여 넣을 가능성은 거의 없지만 URL은 항상 태그와 DocTypes로 인용됩니다. 그래서 당신의 regex는 다음과 같습니다.

(^|[^'"])(http://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?)([^'"]+|$)

(^| [^' "]+)는 문자열의 시작 또는 인용문이 아닌 문자를 의미합니다 ([^'"] | $) 문자열의 끝 또는 견적이 아닙니다.

이전 Regex 주변의 여분의 괄호는 캡처 그룹임을 확인하여 URL의 가장자리에 일치 할 수있는 여분의 쓰레기를 얻는 대신 2 (그룹 2)로 실제 URL을 검색 할 수 있습니다.

BTW, URL Regex는 꽤 나쁘게 보이며 더 작고 정확한 형태가 있습니다. 당신은 정말로 모든 것을 피할 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top