PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

  回應
 
主題工具
vxr
Registered User
 
vxr的大頭照
 

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

引用:
作者anderson1127
請注意我之前說的....
如果你有需要刮弧裡的資料,才去刮弧起來,如果只是要match ,不需要matched 後的資料
那刮弧可以不用!!

上面的例子,是需要刮弧內的資料,然後再去match zero or more (意思是說,只要match 0個或以上)
那個pattern的意思是說, 我要match 一個","及數字,數字一組要三個,比如說(000 001 002 ....以此類推)
然後這個matched後的資料,其數目要zero or more !!

也就是說,如果字串是 "123,456,789,000" 就會match ,而matched之後的資料是
,456,789,000

有錯請指正!!

ok..
你的意思我知道了..
不過HTTP URL應該不能把()拿掉吧..
https?://[\w-]+\.+[\w-]+/[\w- ./?%&=]*?
因為我剛剛測試跑出來的結果完全不符合預期
     
      
舊 2011-07-01, 08:41 PM #11
回應時引用此文章
vxr離線中  
vxr
Registered User
 
vxr的大頭照
 

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

引用:
作者anderson1127
天啊 ,這樣討論很累....

直接一點啦, vxr大 , 把您的需求說出來,直接把regular expression設計給您運用好了!! 如何?

我沒有要設計任何特殊的RE pattern..
只是想純粹討論而已..
我工作上尚未有奇怪的RE pattern需求.....
單純只是看一些範例有些疑問而已..

我想這只是很單純吧....
 

此文章於 2011-07-01 08:46 PM 被 vxr 編輯.
舊 2011-07-01, 08:44 PM #12
回應時引用此文章
vxr離線中  
anderson1127
Elite Member
 

加入日期: Jan 2002
文章: 4,035
引用:
作者vxr
我沒有要設計任何特殊的RE pattern..
只是想純粹討論而已..
我工作上尚未有奇怪的RE pattern需求.....
單純只是看一些範例有些疑問而已..

我想這只是很單純吧....


原來是個好奇寶寶....
很多人沒看過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塑化劑
舊 2011-07-01, 08:56 PM #13
回應時引用此文章
anderson1127離線中  
darkangel
Major Member
 
darkangel的大頭照
 

加入日期: Aug 2001
文章: 211
引用:
作者anderson1127
請注意我之前說的....
如果你有需要刮弧裡的資料,才去刮弧起來,如果只是要match ,不需要matched 後的資料
那刮弧可以不用!!

上面的例子,是需要刮弧內的資料,然後再去match zero or more (意思是說,只要match 0個或以上)
那個pattern的意思是說, 我要match 一個","及數字,數字一組要三個,比如說(000 001 002 ....以此類推)
然後這個matched後的資料,其數目要zero or more !!

也就是說,如果字串是 "123,456,789,000" 就會match ,而matched之後的資料是
,456,789,000

有錯請指正!!


+1, 你說的就是我想說的, 只是我當時趕下班, 稍微看一下就回, 所以沒講那麼詳細, 不需要 group 的 back reference 基本上就不用加 (), 像我知道 PCRE 的 parser 程式本身就會有 buffer, 這也是 PCRE 比 POSIX RE 快很多的原因, buffer 與否, 跟 () 應該是沒太大關係.
我也是從 Perl 玩到 PHP, 當初學 Perl 與 RE 也是看駱駝書, 不過那也大概是十幾年前的事了, 老實說也大概忘了書的內容, 倒是 RE 一直用到現在, 搞 Linux Develop 的人, 基本上 RE 是一定要會的.
__________________
滿招損 謙受益
舊 2011-07-01, 10:25 PM #14
回應時引用此文章
darkangel離線中  
b4283
Regular Member
 
b4283的大頭照
 

加入日期: Jan 2004
文章: 83
除了取出資料以外 parenthesis 還有 grouping 的作用,所以 vxr 是對的。

(abcde)? 表示 abcde 這整組字要麻不出現,要麻一起出現。

abcde? 只有指定 e。

所以 vxr 提到 ?: 這個 operator,表示某個 group 不需要取值,這點上他也對了。

此文章於 2011-07-01 10:57 PM 被 b4283 編輯.
舊 2011-07-01, 10:56 PM #15
回應時引用此文章
b4283離線中  
anderson1127
Elite Member
 

加入日期: Jan 2002
文章: 4,035
引用:
作者darkangel
+1, 你說的就是我想說的, 只是我當時趕下班, 稍微看一下就回, 所以沒講那麼詳細, 不需要 group 的 back reference 基本上就不用加 (), 像我知道 PCRE 的 parser 程式本身就會有 buffer, 這也是 PCRE 比 POSIX RE 快很多的原因, buffer 與否, 跟 () 應該是沒太大關係.
我也是從 Perl 玩到 PHP, 當初學 Perl 與 RE 也是看駱駝書, 不過那也大概是十幾年前的事了, 老實說也大概忘了書的內容, 倒是 RE 一直用到現在, 搞 Linux Develop 的人, 基本上 RE 是一定要會的.


原來也是個老玩家啊? (握手) ....

其實,我也是聽說來的,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 編輯.
舊 2011-07-01, 11:38 PM #16
回應時引用此文章
anderson1127離線中  
b4283
Regular Member
 
b4283的大頭照
 

加入日期: Jan 2004
文章: 83
引用:
作者anderson1127
對了,順道問問 , 有沒有人知道C語言下的regular expression有沒有與PHP接近且好用的

應該是 pcre 了吧…?
BSD license
現在一般都用 perl extension 了
POSIX 或 GNU 實在不夠用
舊 2011-07-01, 11:52 PM #17
回應時引用此文章
b4283離線中  
darkangel
Major Member
 
darkangel的大頭照
 

加入日期: Aug 2001
文章: 211
引用:
作者b4283
除了取出資料以外 parenthesis 還有 grouping 的作用,所以 vxr 是對的。

(abcde)? 表示 abcde 這整組字要麻不出現,要麻一起出現。

abcde? 只有指定 e。

所以 vxr 提到 ?: 這個 operator,表示某個 group 不需要取值,這點上他也對了。


原來他說的 buffer 是這個, anderson 跟我應該都是看不懂他想表示什麼~

簡單來說, 就是他說的 buffer 跟我認為的 buffer 是不同的東西...
而且我也一直看不懂 [\w-] 是什麼, 因為如果要取 - 這個字元, 我記得要把 - 寫在前面像 [-\w] 才不會有問題.
我很久沒碰較複雜的 RE pattern, 現在用的都是小 case~

引用:
作者anderson1127
對了,順道問問 , 有沒有人知道C語言下的regular expression有沒有與PHP接近且好用的
Library 套件? 我之前裝了一套Library for Linux using C ,臨時想不起來名字
但是看了看man page 及example 還是沒有Perl or PHP下方便好用,甚至有些功能都沒提供...


PHP 的 perl RE 實際上是拿 C 的 pcre library 來用啊~
當然我不知道現在改了沒, 畢竟我五年沒碰 PHP~
__________________
滿招損 謙受益

此文章於 2011-07-02 05:18 AM 被 darkangel 編輯.
舊 2011-07-02, 05:16 AM #18
回應時引用此文章
darkangel離線中  
b4283
Regular Member
 
b4283的大頭照
 

加入日期: 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;
}
舊 2011-07-02, 12:17 PM #19
回應時引用此文章
b4283離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是10:23 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2026。