瀏覽單個文章
darkangel
Major Member
 
darkangel的大頭照
 

加入日期: Aug 2001
文章: 211
引用:
作者vxr
之前我都是自寫的...
寫過應該知道Regex沒有一定的形式, 變化性高...

這是我從微軟的VS看到的pattern, 用來檢查HTTP URL的合法性..
http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

除了一個基本的Domain Name命名,也考慮到子目錄和QueryString的情況.
其實想問的問題很簡單, 整個pattern的後半部(/[\w- ./?%&=]*)?
(/[之間的/符號可以不加吧?? ...
加了感覺好像會有問題的樣子...
http://www.test.com.tw?id=a1111995
這樣的形式不就不符合這個pattern了嗎?..
還是我少考慮到什麼??...

另一個是這個從VS看到的pattern, 用來檢查E-Mail格式:
\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
那個最後接的([-.]\w+)*, 總覺得可加可不加的樣子...
總覺得:
string pattern= @"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+$";
不加看起來...


你給的資訊太少, 我不能給你太多我的想法, RE 我不是非常強, 但應該還算是有堪用程度, 我在三四種語言中用過 RE, 每種都有點點不一樣, 但其實還是有基本標準在.

1. 請問你使用語言是哪一種? 請問你用的是語言內建 RE 或是 library 利如 PCRE (我通常都用這個, 屬於 Perl 系).
2. 請問你用哪一種 RE 標準? 目前常見 RE 有三種: POSIX, POSIX extension, Perl compatible, 此外還有一些軟體自訂的.

回你的問題, 我是以我看到的來說:
1. 加 () 非常奇怪, 因為只是做驗證, 沒有要做字串替換, 不需要上 group, 理論上可以把所有 () 通通拿掉, 如 pattern 1:
https?://[\w-]+\.+[\w-]+/[\w- ./?%&=]*?

2. \w 在你使用的 RE 中是什麼意思? 是 white-space 還是 word?

我要下班了, 其他的有空再討論, 先回你第一個問題, 最後一個 [ 之前的 / 如果是可有可無, 你就加一個 ? 在 / 後面即可, 這樣 http://www.test.com.tw?id=a1111995 應該就不會有問題了.
 
__________________
滿招損 謙受益
舊 2011-07-01, 06:42 PM #2
回應時引用此文章
darkangel離線中