2016-02-27 78 views
0

我有這樣的正則表達式代碼:正則表達式不會檢查是否有空間或不

match [a-zA-Z0-9\-\.]+\s?(\.|dot|\(dot\)|-|;|:|,)\s?(com|org|net|cz|co|uk|sk|biz|mobi|xxx|eu|me|io|lt)\b 

當有人發佈自己的服務器是這樣的:

m c . s e r v e r . c o m 

它繞過併發送此消息到服務器。

那麼,如何解決這個問題呢?先謝謝你! :)

+2

請告訴我們的代碼,並添加一個標記,用於指定使用的是 –

+0

什麼[A-ZA-Z0-9編程語言\ - \。] +模擬匹配? – cutzero

+0

這是Java語言。對不起,但我沒有源代碼。我正在使用插件。 [a-zA-Z0-9 \ - \。] +會在.com(或者smth else)或者mc之後匹配文本。 (或其他) – Sprunkas

回答

0

我已經做了一個解決方法,你會用它來首先格式化你的文本,你的正則表達式的工作方式。我可能會錯過一些情況,如果是這種情況,只需添加一條評論解釋,我會盡力掩蓋它。

這裏是我做了什麼:

public static void findAd(String text){ 
    text = text.replaceAll("\\b(\\w) (?!\\w{2,})", "$1"); 
    text = text.replaceAll("(\\w+)(?:\\.)", "$1."); 
    text = text.replaceAll("(\\w+)(?: dot)", "$1."); 
    return text; 
} 

所以,當你調用此方法,如:

System.out.println(findAd("bla bla bla bla m c . s e r v e r . c o m bla bla bla")); 
System.out.println(findAd("m c . s e r v e r . c o m bla bla bla")); 
System.out.println(findAd("bla bla bla m c . s e r v e r . c o m")); 
System.out.println(findAd("m c . s e r v e r . c o m")); 
System.out.println(findAd("m c dot s e r v e r dot c o m")); 
System.out.println(findAd("bla bla bla m c dot s e r v e r dot c o m bla")); 

你會得到作爲輸出:

bla bla bla bla mc.server.com bla bla bla 
mc.server.com bla bla bla 
bla bla bla mc.server.com 
mc.server.com 
mc.server.com 
bla bla bla mc.server.com bla 

然後,只需用你的測試稱呼你的表情:

if (yourMethodThatCheckForAd(find(text))) ... 

或者只是添加我到您現有的方法中提供的代碼 :)

相關問題