2012-08-23 40 views
-1

基本上如果文本是像"lalala www.test.com lala http://test66.com"我需要一個正則表達式,使其"lalala http://www.test.com lala http://test66.com" Java的正則表達式匹配只有網址與WWW,不是那些以http:// WWW

感謝

String plain = "test lalala www.test.com lalaal jaja http://www.test.com"; 
    String str = "(?:(?:w{3}\.)(?:[a-zA-Z0-9/;\?&=:\-_\$\+!\*'\(\|\\~\[\]#%\.])+[\.com|\.edu|\.gov|\.int|\.mil|\.net|\.org|\.biz|\.info|\.name|\.pro|\.aero|\.coop|\.museum|\.cat|\.jobs|\.travel|\.arpa|\.mobi|\.ac|\.ad|\.ae|\.af|\.ag|\.ai|\.al|\.am|\.an|\.ao|\.aq|\.ar|\.as|\.at|\.au|\.aw|\.az|\.ax|\.ba|\.bb|\.bd|\.be|\.bf|\.bg|\.bh|\.bi|\.bj|\.bm|\.bn|\.bo|\.br|\.bs|\.bt|\.bv|\.bw|\.by|\.bz|\.ca|\.cc|\.cd|\.cf|\.cg|\.ch|\.ci|\.ck|\.cl|\.cm|\.cn|\.co|\.cr|\.cs|\.cu|\.cv|\.cx|\.cy|\.cz|\.de|\.dj|\.dk|\.dm|\.do|\.dz|\.ec|\.ee|\.eg|\.eh|\.er|\.es|\.et|\.eu|\.fi|\.fj|\.fk|\.fm|\.fo|\.fr|\.ga|\.gb|\.gd|\.ge|\.gf|\.gg|\.gh|\.gi|\.gl|\.gm|\.gn|\.gp|\.gq|\.gr|\.gs|\.gt|\.gu|\.gw|\.gy|\.hk|\.hm|\.hn|\.hr|\.ht|\.hu|\.id|\.ie|\.il|\.im|\.in|\.io|\.iq|\.ir|\.is|\.it|\.je|\.jm|\.jo|\.jp|\.ke|\.kg|\.kh|\.ki|\.km|\.kn|\.kp|\.kr|\.kw|\.ky|\.kz|\.la|\.lb|\.lc|\.li|\.lk|\.lr|\.ls|\.lt|\.lu|\.lv|\.ly|\.ma|\.mc|\.md|\.mg|\.mh|\.mk|\.ml|\.mm|\.mn|\.mo|\.mp|\.mq|\.mr|\.ms|\.mt|\.mu|\.mv|\.mw|\.mx|\.my|\.mz|\.na|\.nc|\.ne|\.nf|\.ng|\.ni|\.nl|\.no|\.np|\.nr|\.nu|\.nz|\.om|\.pa|\.pe|\.pf|\.pg|\.ph|\.pk|\.pl|\.pm|\.pn|\.pr|\.ps|\.pt|\.pw|\.py|\.qa|\.re|\.ro|\.ru|\.rw|\.sa|\.sb|\.sc|\.sd|\.se|\.sg|\.sh|\..si|\.sj|\.sk|\.sl|\.sm|\.sn|\.so|\.sr|\.st|\.sv|\.sy|\.sz|\.tc|\.td|\.tf|\.tg|\.th|\.tj|\.tk|\.tl|\.tm|\.tn|\.to|\.tp|\.tr|\.tt|\.tv|\.tw|\.tz|\.ua|\.ug|\.uk|\.um|\.us|\.uy|\.uz|\.va|\.vc|\.ve|\.vg|\.vi|\.vn|\.vu|\.wf|\.ws|\.xxx|\.ye|\.yt|\.yu|\.za|\.zm|\.zw](?:[a-zA-Z0-9/;\?&=:\-_\$\+!\*'\(\|\\~\[\]#%\.])*)"; 
    Pattern patt = Pattern.compile(str); 
    Matcher matcher = patt.matcher(plain); 
    plain = matcher.replaceAll("http://$1"); 

這是我所嘗試過的,但我無法正確地逃脫弦。除此之外,正則表達式本身比我需要的多一點。

+0

顯示我們你試過了什麼,然後我們可以試着幫你。有很多人在這裏多次問過同樣的問題。 –

+1

'.replaceAll(「(URL_REGEX_WITHOUT_HTTP_PREFIX_YOULL_FIND_ON_THE_WEB)」,「http:// $ 1」);' – sp00m

+0

良好的編輯。如果發佈了[SSCCE](http://sscce.org/)而不是片段,並且更詳細地說明它如何失敗,可能會更好。 –

回答

0

嘗試了這一點......

String s = "lalala http://www.test.com lala http://test66.com"; 

    Pattern pat = Pattern.compile("\\b(((ht|f)tp(s?)\\:\\/\\/|~\\/|\\/)|www.)" + 
        "(\\w+:\\[email protected])?(([-\\w]+\\.)+(com|org|net|gov" + 
        "|mil|biz|info|mobi|name|aero|jobs|museum" + 
        "|travel|[a-z]{2}))(:[\\d]{1,5})?" + 
        "(((\\/([-\\w~!$+|.,=]|%[a-f\\d]{2})+)+|\\/)+|\\?|#)?" + 
        "((\\?([-\\w~!$+|.,*:]|%[a-f\\d{2}])+=?" + 
        "([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)" + 
        "(&(?:[-\\w~!$+|.,*:]|%[a-f\\d{2}])+=?" + 
        "([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)*)*" + 
        "(#([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)?\\b"); 

    Matcher mat = pat.matcher(s); 

     while(mat.find()){ 

       mat.replaceAll("http:"); 
      } 

      System.out.println(s); 
+0

感謝您的嘗試,但我需要一個正則表達式,它將http://添加到只有www的所有鏈接(從而將它們轉換爲http:// www) 。我遇到的問題是不要將http://添加到已有的鏈接中(並且使用http:// http:// www)。對不起,如果我不夠清楚。 – Andrei

+0

忘記標記鏈接..「感謝您的嘗試,但我需要一個正則表達式,它將http://添加到只有www的所有鏈接(從而將它們轉換爲[http:// www](http:// www) )。我所遇到的問題不是將http://添加到已有的鏈接中(並且製作了類似[http:// http:// www(http:// http:// www)的鏈接)。對不起,如果我不夠清楚「 – Andrei

0
replaceAll(" www."," http://www"); would work, 

如果不是 '' 字符befor WWW,你可以管,如果在一組somethiong這樣"(|,|;|>)www."

相關問題