2014-02-15 37 views
0

我想正則表達式匹配,如http://www.example.comexample.co.uken.example.com等。我一直在使用^(https?://|www\.|)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$http://regexpal.com/測試它的網絡地址,它似乎正是因爲它應該工作。AutoHotkey的:正則表達式不表現爲預期

但是,當我把它放在autohotkey中時,它似乎會匹配exampleexample.something等額外的東西,當它不應該的時候。然後它應該不匹配example.com/somethingexample.com/something.html

If RegExMatch(Clipboard, "^(https?://|www\.|)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$") 
    Msgbox, it matches 
else 
    Msgbox, it doesn't 

回答

1

匹配URL,主機名等是多次解決的問題;我建議你適應一些標準的正則表達式。也許SO question: Fully qualified domain name validation是有幫助的。


如果您撰寫的正則表達式作爲一個練習:

是否真的匹配字符串example?你堅決聲明字符串包含.,所以它永遠不會。也許AHK不逃避.的標準方式?

如果[a-zA-Z]{2,3}應該匹配頂級域名,那麼您忘記了.info

如果您不小心將一些這樣的內容複製到剪貼板中,您可能希望允許在末尾和開始處允許任意長度的空白字符串。即^\s*your-regex-thingy\s*$

example.something匹配,因爲它與空字符串開始,以1個以上字母數字(或-.),一個.,2或3個字母的序列如下,並與一個非序列結束空白。

example.com/something.html如果整個子字符串example.com與組[a-zA-Z0-9\-\.]+匹配,則可能無法匹配。不過,如果正確實現了正則表達式引擎,它應該不會。也許你需要逃跑+|或一些這樣的,發動機有這樣的(即sedpcre不同的習俗有+(不同意見,如果我沒有記錯。

+0

我會走得儘可能讓不只是空白區域,但其他*噪音*繞過剪貼板中的URL。換句話說,我只是簡單地刪除'^'和'$'。如果複製東西,你永遠不會知道瀏覽器或文字處理器實際上做了什麼,特別是如果它們是來自微軟;)例如,JavaScript可以*「劫持」你的剪貼板,這是一個[示例](http://www.firstpost.com/politics/volunteers-or-vigilantes-the-perils-of-aaps-anarchic -politics-1328297.html)。嘗試複製新聞中的內容並將其粘貼到某處。 – MCL

+0

謝謝!原來它*是一個逃避問題。我將轉義字符更改爲/,所以我需要其中兩個讓正則表達式正常工作。 –

相關問題