瀏覽單個文章
vxr
Registered User
 
vxr的大頭照
 

加入日期: May 2002
您的住址: 地球的上面..
文章: 5,854
Exclamation

引用:
作者darkangel
你給的資訊太少, 我不能給你太多我的想法, 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?

我要下班了, 其他的有空再討論, 先回你第一個問題, 最後一個 [ 之前的 / 如果是可有可無, 你就加一個 ? 在 / 後面即可, 這樣 ...

我是直接用該語言整合的RE...
並沒有參考其他lib(有現成就直接用囉.....)..
目前是看javascript和微軟NET.的C#(進入CLR[CTS, CLS]之後, 這部分差不到哪..)



"加 () 非常奇怪, 因為只是做驗證, 沒有要做字串替換, 不需要上 group, 理論上可以把所有 () 通通拿掉, 如 pattern 1:"
https?://[\w-]+\.+[\w-]+/[\w- ./?%&=]*?
這是微軟的IDE給的
我的想法是...
()作為子匹配的話..., 還是有意義存在吧(未必只是作為替換..).....
子匹配會被緩衝
使用\num做back reference抓取子匹配.., 在有些情況作驗證還是有幫助...
例如HTML tag檢查, 給他group讓他子匹配緩衝供下次使用......

再來, 這範例不加(), 不是會很奇怪嗎...
其中([\w-]+\.)+ , 匹配允許aaa.bbb.ccc
問號拿掉: [\w-]+\.+, 我的想法是 aaa..... 這樣的奇怪情況不是也可以符合??..
如果不想給他分組做緩衝, 用(=pattern)也是可以吧...
不想讓子匹配緩衝且不回傳, 用(?: pattern) 也是可行...
一個微軟MSDN的例子: (,[0-9]{3})*
尋找零個以上出現的下列模式:群組分隔符號加三個十進位數字。
你把()拿掉不就很奇怪的??..

\ 的問題...
我的意思是說那個/應該可以直接省掉吧....
變成=> http(s)?://([\w-]+\.)+[\w-]+([\w- ./?%&=]*)?

"\w 在你使用的 RE 中是什麼意思? 是 white-space 還是 word?"
\w=[A-Za-z0-9_]
舊 2011-07-01, 07:51 PM #3
回應時引用此文章
vxr離線中