![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 七嘴八舌異言堂
(https://www.pcdvd.com.tw/forumdisplay.php?f=12)
- - 詢問一個Regular Expression的pattern...!!
(https://www.pcdvd.com.tw/showthread.php?t=934633)
|
|---|
引用:
ok.. 你的意思我知道了.. 不過HTTP URL應該不能把()拿掉吧:confused:.. https?://[\w-]+\.+[\w-]+/[\w- ./?%&=]*? 因為我剛剛測試跑出來的結果完全不符合預期:flash: |
引用:
我沒有要設計任何特殊的RE pattern.. 只是想純粹討論而已.. 我工作上尚未有奇怪的RE pattern需求..... 單純只是看一些範例有些疑問而已.. 我想這只是很單純吧..:flash:.. |
引用:
原來是個好奇寶寶.... 很多人沒看過Regular Expression的人會完全看不懂Regular Expression在做什麼 如果想懂原理,請去念駱駝書第二章 , 中文書也有 , 不過我當初是念原文書 ,我也常跟同事說 那本書是讓我一K崩掉兩顆門牙的一本書 ... :jolin: 我當初是一邊念,一邊做實驗學來的,因為裡面很多說明,光是看文字敘述是無法體會的 只有實際操刀才會心領神會的... 駱駝書是我看過唯一把Regular Expression講得非常清楚的一本書,我也相信其它的Programming Language 都是follow 它的rules來設計Regular Expression Engine !! |
引用:
+1, 你說的就是我想說的, 只是我當時趕下班, 稍微看一下就回, 所以沒講那麼詳細, 不需要 group 的 back reference 基本上就不用加 (), 像我知道 PCRE 的 parser 程式本身就會有 buffer, 這也是 PCRE 比 POSIX RE 快很多的原因, buffer 與否, 跟 () 應該是沒太大關係. 我也是從 Perl 玩到 PHP, 當初學 Perl 與 RE 也是看駱駝書, 不過那也大概是十幾年前的事了, 老實說也大概忘了書的內容, 倒是 RE 一直用到現在, 搞 Linux Develop 的人, 基本上 RE 是一定要會的. |
除了取出資料以外 parenthesis 還有 grouping 的作用,所以 vxr 是對的。
(abcde)? 表示 abcde 這整組字要麻不出現,要麻一起出現。 abcde? 只有指定 e。 所以 vxr 提到 ?: 這個 operator,表示某個 group 不需要取值,這點上他也對了。 |
引用:
原來也是個老玩家啊? (握手) .... :D 其實,我也是聽說來的,PHP並沒有實作完整的Perl RE Engine , 但目前所提供的已經非常夠用了... 那個\w- 害我一直看不懂,我通常使用都是\w+ ,怎麼突然變成 \w- :shock: 想來想去,唉唷.... match itself (能夠心領神會的人,我想不多吧? ) 當初那本駱駝書裡描述的,對我來說,每個字都懂,都知道意思,組合起來一看,卻成了看不懂的文字敘述了 !! 後來的中文書我有翻閱,還好,中文字都懂了, 但我相信 , 新手去看的話,大概也會遇到跟我 當初一樣的狀況.... :laugh: ----- 對了,順道問問 , 有沒有人知道C語言下的regular expression有沒有與PHP接近且好用的 Library 套件? 我之前裝了一套Library for Linux using C ,臨時想不起來名字 但是看了看man page 及example 還是沒有Perl or PHP下方便好用,甚至有些功能都沒提供... |
引用:
應該是 pcre 了吧…? BSD license 現在一般都用 perl extension 了 POSIX 或 GNU 實在不夠用 |
引用:
原來他說的 buffer 是這個, anderson 跟我應該都是看不懂他想表示什麼~ :stupefy: :stupefy: :stupefy: 簡單來說, 就是他說的 buffer 跟我認為的 buffer 是不同的東西... 而且我也一直看不懂 [\w-] 是什麼, 因為如果要取 - 這個字元, 我記得要把 - 寫在前面像 [-\w] 才不會有問題. 我很久沒碰較複雜的 RE pattern, 現在用的都是小 case~ 引用:
PHP 的 perl RE 實際上是拿 C 的 pcre library 來用啊~ 當然我不知道現在改了沒, 畢竟我五年沒碰 PHP~ :laugh: :laugh: :laugh: |
昨天晚上隨便玩了一下,還不錯用,參考一下。
/* * ===================================================================================== * * 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; } |
| 所有的時間均為GMT +8。 現在的時間是10:11 AM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2026。