青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

怎么使用PCRE庫?

一直找PCRE的學習資料,網上沒有發現很全面的,回過頭了仔細看了一下PCRE源碼dochtml下的資料,發現其實這些文檔就是非常不錯的學習材料。

今天看了一下如何使用PCRE,還沒有涉及到PCRE原理和實現的代碼。我們可以在http://www.pcre.org/上下載到pcre的代碼,下載到的源文件pcre-x.x.tar.bz2在linux下面很容易就可以被編譯和安裝(x86 系列cpu哦)。

./configure

make

make install

PCRE編譯安裝之后,以一個lib庫的方式提供給用戶程序進行使用,PCRE lib 提供了一組API,通過這一組API可以實現類似于Perl語法的正則表達式查找和匹配的功能。(PCREE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl, with just a few differences.)

要想使用好PCRE,要了解很多正則表達式的內容、同時需要對PCRE進行很多的配置,從而使其支持不同的模式和規格。在這里只是簡單的描述一下使用PCRE的方法,不涉及配置和正則表達式語法的內容。

使用PCRE主要是使用下面的四個函數,對這四個函數有了了解,使用PCRE庫的時候就會簡單很多。

pcre_compile() /pcre_compile2()

pcre_study()

pcre_exec()

1. pcre_compile() /pcre_compile2(), 正則表達式在使用之前要經過編譯。

pcre *pcre_compile(const char *pattern, int options, const char **errptr, int *erroffset, const unsigned char *tableptr);

pcre *pcre_compile2(const char *pattern, int options, int *errorcodeptr, const char **errptr, int *erroffset, const unsigned char *tableptr);

編譯的目的是將正則表達式的pattern轉換成PCRE引擎能夠識別的結構(struct real_pcre)。

還沒有對編譯的過程進行分析.

2. pcre_study(),對編譯后的正則表達式結構(struct real_pcre)進行分析和學習,學習的結果是一個數據結構(struct pcre_extra),這個數據結構連同編譯后的規則(struct real_pcre)可以一起送給pcre_exec單元進行匹配.

If a compiled pattern is going to be used several times, it is worth spending more time analyzing it in order to speed up the time taken for matching. The function pcre_study() takes a pointer to a compiled pattern as its first argument. If studying the pattern produces additional information that will help speed up matching, pcre_study() returns a pointer to a pcre_extra block, in which the study_data field points to the results of the study.

pcre_study()的引入主要是為了加速正則表達式匹配的速度.(為什么學習后就能加速呢?)這個還是比較有用的,可以將正則表達式編譯,學習后保存到一個文件或內存中,這樣進行匹配的時候效率比較搞.snort中就是這樣做的.

3. pcre_exec(),根據正則表達式到指定的字符串中進行查找和匹配,并輸出匹配的結果.

The function pcre_exec() is called to match a subject string against a compiled pattern, which is passed in the code argument. If the pattern has been studied, the result of the study should be passed in the extra argument. This function is the main matching facility of the library, and it operates in a Perl-like manner.

4. Snort中如何使用PCRE呢?snort中以插件的形式調用PCRE進行正則表達式的匹配。

1)進行正則表達式的初始化。

InitializeDetection--> RegisterRules-->RegisterOneRule-->PCRESetup(Just for OPTION_TYPE_PCRE)->pcre_compile and pcre_study. All will be stored in a structure called PCREInfo in the memory.

2.) 規則的匹配。DetectionCheckRule-->ruleMatch-->ruleMatchInternal-->pcreMatch(OPTION_TYPE_PCRE)->pcre_test-->pcre_exec.

5.編譯PCRE on TILERA platform.

1) tar -xjvf pcre-7.9.tar.bz2

2) Modify config.sub to support tile architecture.

We wish to use DE>HOST=tileDE>, but the DE>tileDE> architecture is not yet standard, so may not exist in the DE>config.subDE> file. If necessary, add these lines in the alphabetical list of architectures (typically about 1,100 lines down):

 tile*)
  basic_machine=tile-tilera
  os=-linux-gnu
  ;;
3) Compile PCRE on tile Linux. 
** Start up TILERA card through tile-monitor.
tile-monitor --pci --mount-tile /usr  \
  --mount-tile /bin --mount-tile /sbin --mount-tile /etc --mount-tile /lib \
  --mkdir /mnt/libs --mount /libs-compile /mnt/libs \
  --mkdir /mnt/mde  --mount $TILERA_ROOT /mnt/mde
* ./configure --build=tile  --prefix=/usr  lt_cv_sys_max_cmd_len=262144 --disable-cpp
//編譯的時候沒有使能c++的支持。
pcre-7.9 configuration summary:
   pcre-7.9 configuration summary:
    Install prefix .................. : /usr
    C preprocessor .................. : gcc -E
    C compiler ...................... : gcc
    C++ preprocessor ................ : g++ -E
    C++ compiler .................... : g++
    Linker .......................... : /usr/bin/ld
    C preprocessor flags ............ :
    C compiler flags ................ : -O2
    C++ compiler flags .............. : -O2
    Linker flags .................... :
    Extra libraries ................. :
    Build C++ library ............... : no
    Enable UTF-8 support ............ : no
    Unicode properties .............. : no
    Newline char/sequence ........... : lf
    \R matches only ANYCRLF ......... : no
    EBCDIC coding ................... : no
    Rebuild char tables ............. : no
    Use stack recursion ............. : yes
    POSIX mem threshold ............. : 10
    Internal link size .............. : 2
    Match limit ..................... : 10000000
    Match limit recursion ........... : MATCH_LIMIT
    Build shared libs ............... : yes
    Build static libs ............... : yes
    Link pcregrep with libz ......... : no
    Link pcregrep with libbz2 ....... : no
    Link pcretest with libreadline .. : no
* make
* make install

4) Compile the PCRE demo code and test PCRE lib on TILERA linux. PCRE 的源文件中提供了兩個demo程序,一個是比較簡單的pcredemo.c,很容易理解;另外一個是pcretest.c,這個比較全面、完整的介紹了pcre庫的使用。這兩個demo本身就是非常好的學習材料。
# gcc -o pcredemo pcredemo.c -lpcre
#  ./pcredemo 'cat|dog' 'the cat sat on the mat'
Match succeeded at offset 4
0: cat
No named substrings
# ./pcredemo -g 'cat|dog' 'the dog sat on the cat'
Match succeeded at offset 4
0: dog
No named substrings
Match succeeded again at offset 19
0: cat
No named substrings
//參考資料:
PCRE源碼文檔:pcre-7.9/doc/html

posted on 2009-09-07 21:46 肥仔 閱讀(4797) 評論(1)  編輯 收藏 引用 所屬分類: 庫 & 代碼段

評論

# re: 怎么使用PCRE庫?  回復  更多評論   

不錯呢,正好在研究pcre,謝了
2011-08-03 08:59 | 編程
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品亚洲不卡a| 在线亚洲成人| 亚洲主播在线播放| 一区二区三区国产在线| 亚洲作爱视频| 亚洲视频一区在线观看| 亚洲一区日韩在线| 午夜精品www| 久久精品国产欧美激情| 免费人成网站在线观看欧美高清| 噜噜噜噜噜久久久久久91| 亚洲国产成人在线| 欧美91精品| 99日韩精品| 欧美综合国产| 欧美精品一区二区高清在线观看| 国产精品久久久久高潮| 亚洲成人直播| 欧美一区=区| 欧美激情精品久久久六区热门 | 亚洲高清视频一区二区| 亚洲免费av片| 久久久91精品国产一区二区三区 | 另类春色校园亚洲| 欧美人在线视频| 狠狠干成人综合网| 久久久中精品2020中文| 欧美激情中文字幕在线| 国产偷国产偷精品高清尤物| 亚洲人成网站在线播| 性久久久久久| 日韩一级精品| 老司机精品视频网站| 国产精品亚洲成人| 中文亚洲免费| 亚洲高清自拍| 久久综合99re88久久爱| 国产日韩一区欧美| 亚洲一区二区三区在线观看视频| 欧美高清影院| 久久在线91| 海角社区69精品视频| 欧美亚洲三区| 亚洲一本大道在线| 欧美日韩日日夜夜| 亚洲乱码久久| 亚洲国产1区| 欧美成人一区二区三区在线观看| 激情久久婷婷| 久久先锋影音av| 久久av一区二区三区| 国产精品亚洲产品| 欧美一区二区三区另类| 在线亚洲电影| 国产精品成人在线| 一本综合久久| 亚洲毛片一区| 欧美日韩亚洲一区二区三区在线观看 | 亚洲综合日韩| 99热精品在线观看| 欧美日韩理论| 亚洲一区综合| 亚洲欧美成人综合| 国产精品婷婷| 久久久之久亚州精品露出| 久久精品卡一| 亚洲人成人一区二区三区| 亚洲缚视频在线观看| 欧美经典一区二区三区| 一区二区三区国产| 亚洲一区二区黄| 国产精品影音先锋| 久久香蕉国产线看观看av| 久久综合导航| 国产精品99久久久久久久vr| 99视频热这里只有精品免费| 欧美日韩国产色站一区二区三区| av成人免费观看| 中文国产成人精品| 国产自产精品| 亚洲丰满在线| 欧美亚洲成人免费| 久久久综合精品| 欧美激情久久久久久| 亚洲一区二区精品视频| 欧美综合第一页| 欧美日韩久久| 亚洲一本视频| 一区二区三区四区精品| 国产美女扒开尿口久久久| 久久久亚洲高清| 欧美日韩成人| 久久黄色影院| 欧美激情视频网站| 欧美伊人久久久久久午夜久久久久 | 午夜影院日韩| 久久久亚洲一区| 日韩午夜高潮| 亚洲男人av电影| 亚洲成人在线| 亚洲午夜羞羞片| 亚洲激情不卡| 欧美一级一区| 99国产一区| 久久精品国产91精品亚洲| 一区二区三区精品视频在线观看| 久久国产精品99精品国产| 一本色道久久综合亚洲精品按摩| 欧美一区在线直播| 亚洲欧美国产毛片在线| 欧美大胆成人| 蜜臀av一级做a爰片久久 | 国产免费亚洲高清| 亚洲精品乱码久久久久久| 国产伦精品一区二区三区免费| 欧美国产日产韩国视频| 国模精品一区二区三区色天香| 日韩亚洲国产欧美| 亚洲三级免费| 美腿丝袜亚洲色图| 久久亚洲私人国产精品va| 国产精品成人观看视频国产奇米| 亚洲第一精品影视| 在线 亚洲欧美在线综合一区| 亚洲一区三区视频在线观看| 一区二区三区四区在线| 欧美激情成人在线视频| 欧美激情一区在线| 亚洲韩日在线| 欧美成人精品高清在线播放| 巨胸喷奶水www久久久免费动漫| 国产美女诱惑一区二区| 亚洲淫性视频| 欧美一级网站| 国产偷久久久精品专区| 久久gogo国模啪啪人体图| 久久激情视频久久| 国产视频久久久久| 欧美中文字幕不卡| 噜噜噜噜噜久久久久久91| 亚洲第一主播视频| 欧美成人午夜77777| 亚洲人体偷拍| 亚洲欧美日韩另类| 国产日韩精品在线观看| 久久国产精品毛片| 亚洲人午夜精品免费| 蜜桃伊人久久| 亚洲精品日韩综合观看成人91| 一区二区高清| 国产精品久久久久久久久久免费 | 欧美另类变人与禽xxxxx| 亚洲黄色在线| 亚洲欧美日韩视频一区| 国产日韩在线一区二区三区| 欧美在线视频二区| 欧美国产精品一区| 一区二区不卡在线视频 午夜欧美不卡在 | 国产一区二区三区四区老人| 欧美一区在线看| 亚洲第一精品夜夜躁人人躁| 日韩一级成人av| 国产精品二区在线观看| 欧美一区二区视频在线观看| 欧美1区免费| 亚洲午夜女主播在线直播| 国产欧美综合一区二区三区| 久久久久久久一区二区| 亚洲精品午夜| 久久精品国产99精品国产亚洲性色| 一区二区三区在线视频播放| 欧美久久久久久久| 午夜精品区一区二区三| 欧美激情成人在线| 亚洲中午字幕| 亚洲精品久久久久久久久| 国产精品久久久久免费a∨大胸| 欧美影院精品一区| 日韩视频专区| 免费久久99精品国产自| 亚洲影视中文字幕| 亚洲国产欧美一区二区三区久久| 欧美午夜免费影院| 欧美v日韩v国产v| 欧美亚洲在线| 制服诱惑一区二区| 亚洲第一视频网站| 久久久久免费观看| 亚洲综合社区| 在线视频免费在线观看一区二区| 伊人成人在线视频| 国产日韩欧美在线| 国产精品美女主播| 欧美三级第一页| 欧美精品v日韩精品v韩国精品v| 久久精品色图| 久久激情网站| 欧美一区二视频| 亚洲欧美日韩国产中文| 国产精品99久久不卡二区|