![]() |
||
|
Registered User
加入日期: May 2002 您的住址: 地球的上面..
文章: 5,854
|
引用:
ok.. 你的意思我知道了.. 不過HTTP URL應該不能把()拿掉吧 ..https?://[\w-]+\.+[\w-]+/[\w- ./?%&=]*? 因為我剛剛測試跑出來的結果完全不符合預期 ![]() |
||||||||
|
|
|
Registered User
加入日期: May 2002 您的住址: 地球的上面..
文章: 5,854
|
引用:
我沒有要設計任何特殊的RE pattern.. 只是想純粹討論而已.. 我工作上尚未有奇怪的RE pattern需求..... 單純只是看一些範例有些疑問而已.. 我想這只是很單純吧.. ..此文章於 2011-07-01 08:46 PM 被 vxr 編輯. |
|||
|
|
|
Elite Member
![]() ![]() ![]() ![]() ![]() 加入日期: Jan 2002
文章: 4,035
|
引用:
原來是個好奇寶寶.... 很多人沒看過Regular Expression的人會完全看不懂Regular Expression在做什麼 如果想懂原理,請去念駱駝書第二章 , 中文書也有 , 不過我當初是念原文書 ,我也常跟同事說 那本書是讓我一K崩掉兩顆門牙的一本書 ... 我當初是一邊念,一邊做實驗學來的,因為裡面很多說明,光是看文字敘述是無法體會的 只有實際操刀才會心領神會的... 駱駝書是我看過唯一把Regular Expression講得非常清楚的一本書,我也相信其它的Programming Language 都是follow 它的rules來設計Regular Expression Engine !!
__________________
您想買新硬碟嗎? 購買前請務必參考這篇文章,是我的實際經驗 還想讓統一賺你的錢嗎?統一集團成員(能見度高的): 星巴克、家樂福、7-11、無印良品、黑貓宅急便、聖娜多堡、阪急百貨、 康是美、博客來、夢時代、Mister Donut 、Cold Stone 、龜甲萬、 維力33%股權、光泉31%股權、Smile速邁樂、紅心辣椒、台北轉運站(統一企業BOT) 統一LP33膠囊有環保署早已列管的一級管制品: DNOP塑化劑 |
|
|
|
|
Major Member
![]() 加入日期: Aug 2001
文章: 211
|
引用:
+1, 你說的就是我想說的, 只是我當時趕下班, 稍微看一下就回, 所以沒講那麼詳細, 不需要 group 的 back reference 基本上就不用加 (), 像我知道 PCRE 的 parser 程式本身就會有 buffer, 這也是 PCRE 比 POSIX RE 快很多的原因, buffer 與否, 跟 () 應該是沒太大關係. 我也是從 Perl 玩到 PHP, 當初學 Perl 與 RE 也是看駱駝書, 不過那也大概是十幾年前的事了, 老實說也大概忘了書的內容, 倒是 RE 一直用到現在, 搞 Linux Develop 的人, 基本上 RE 是一定要會的.
__________________
滿招損 謙受益 |
|
|
|
|
Regular Member
![]() ![]() 加入日期: Jan 2004
文章: 83
|
除了取出資料以外 parenthesis 還有 grouping 的作用,所以 vxr 是對的。
(abcde)? 表示 abcde 這整組字要麻不出現,要麻一起出現。 abcde? 只有指定 e。 所以 vxr 提到 ?: 這個 operator,表示某個 group 不需要取值,這點上他也對了。 此文章於 2011-07-01 10:57 PM 被 b4283 編輯. |
|
|
|
Elite Member
![]() ![]() ![]() ![]() ![]() 加入日期: Jan 2002
文章: 4,035
|
引用:
原來也是個老玩家啊? (握手) .... ![]() 其實,我也是聽說來的,PHP並沒有實作完整的Perl RE Engine , 但目前所提供的已經非常夠用了... 那個\w- 害我一直看不懂,我通常使用都是\w+ ,怎麼突然變成 \w- 想來想去,唉唷.... match itself (能夠心領神會的人,我想不多吧? ) 當初那本駱駝書裡描述的,對我來說,每個字都懂,都知道意思,組合起來一看,卻成了看不懂的文字敘述了 !! 後來的中文書我有翻閱,還好,中文字都懂了, 但我相信 , 新手去看的話,大概也會遇到跟我 當初一樣的狀況.... ![]() ----- 對了,順道問問 , 有沒有人知道C語言下的regular expression有沒有與PHP接近且好用的 Library 套件? 我之前裝了一套Library for Linux using C ,臨時想不起來名字 但是看了看man page 及example 還是沒有Perl or PHP下方便好用,甚至有些功能都沒提供...
__________________
您想買新硬碟嗎? 購買前請務必參考這篇文章,是我的實際經驗 還想讓統一賺你的錢嗎?統一集團成員(能見度高的): 星巴克、家樂福、7-11、無印良品、黑貓宅急便、聖娜多堡、阪急百貨、 康是美、博客來、夢時代、Mister Donut 、Cold Stone 、龜甲萬、 維力33%股權、光泉31%股權、Smile速邁樂、紅心辣椒、台北轉運站(統一企業BOT) 統一LP33膠囊有環保署早已列管的一級管制品: DNOP塑化劑 此文章於 2011-07-01 11:42 PM 被 anderson1127 編輯. |
|
|
|
|
Regular Member
![]() ![]() 加入日期: Jan 2004
文章: 83
|
引用:
應該是 pcre 了吧…? BSD license 現在一般都用 perl extension 了 POSIX 或 GNU 實在不夠用 |
|
|
|
|
Major Member
![]() 加入日期: Aug 2001
文章: 211
|
引用:
原來他說的 buffer 是這個, anderson 跟我應該都是看不懂他想表示什麼~ 簡單來說, 就是他說的 buffer 跟我認為的 buffer 是不同的東西... 而且我也一直看不懂 [\w-] 是什麼, 因為如果要取 - 這個字元, 我記得要把 - 寫在前面像 [-\w] 才不會有問題. 我很久沒碰較複雜的 RE pattern, 現在用的都是小 case~ 引用:
PHP 的 perl RE 實際上是拿 C 的 pcre library 來用啊~ 當然我不知道現在改了沒, 畢竟我五年沒碰 PHP~ ![]()
__________________
滿招損 謙受益 此文章於 2011-07-02 05:18 AM 被 darkangel 編輯. |
||
|
|
|
Regular Member
![]() ![]() 加入日期: Jan 2004
文章: 83
|
昨天晚上隨便玩了一下,還不錯用,參考一下。
/* * ===================================================================================== * * Filename: pcre.c * * Description: pcre test * * Version: 1.0 * Created: 西元2011年07月02日 00時13分35秒 * Revision: none * Compiler: gcc * * Author: b4283 * Company: * * ===================================================================================== */ #include <stdio.h> #include <pcre.h> int main() { int i; pcre *pp; char err[50]; int errcode; char *ps = "ababcde"; pp = pcre_compile("ab(abcde)?", 0, &err, &errcode, NULL); int rc; int ovector[30]; for (i=0; i<30; i++) { ovector[i] = 0; } rc = pcre_exec(pp, NULL, ps, 7, 0, 0, ovector, 30); printf("%d\n", rc); char *ps2; pcre_get_substring(ps, ovector, rc, 1, &ps2); printf("%s\n", ps2); return 0; } |
|
|