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

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 肥仔 閱讀(4816) 評論(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>
            国产精品一区二区三区四区| 亚洲免费视频成人| 亚洲欧美日韩国产成人精品影院 | 欧美日本精品在线| 午夜视频在线观看一区| 欧美wwwwww| 卡一卡二国产精品| 国产精品综合久久久| 日韩午夜精品| 91久久夜色精品国产九色| 午夜精品一区二区三区在线| 亚洲午夜三级在线| 麻豆精品在线播放| 久久天天躁狠狠躁夜夜爽蜜月| 国产精品―色哟哟| 日韩午夜电影在线观看| 亚洲久久一区| 欧美成人一区二区三区在线观看| 久久一区二区三区四区| 国产精品一卡二| 亚洲影视综合| 午夜视频在线观看一区二区三区| 欧美激情精品久久久| 亚洲韩国一区二区三区| 91久久久久久国产精品| 麻豆精品在线视频| 欧美成人午夜77777| 亚洲成色999久久网站| 久久久国产精彩视频美女艺术照福利| 久久成人精品无人区| 国产一区二区精品在线观看| 欧美亚洲午夜视频在线观看| 欧美在线免费| 国产视频久久久久| 欧美在线观看日本一区| 久久天天躁狠狠躁夜夜爽蜜月| 韩曰欧美视频免费观看| 久久久免费精品视频| 欧美mv日韩mv国产网站app| 亚洲高清三级视频| 欧美国产激情| 在线亚洲精品福利网址导航| 欧美一区免费视频| 激情丁香综合| 欧美1区2区| 在线一区亚洲| 久久久久久久久蜜桃| 亚洲高清在线观看一区| 欧美欧美在线| 午夜精品一区二区三区电影天堂| 久久亚洲捆绑美女| 亚洲欧洲日本国产| 国产精品人人爽人人做我的可爱| 午夜日韩福利| 亚洲日本中文| 欧美亚洲在线视频| 伊人成人网在线看| 欧美欧美午夜aⅴ在线观看| 亚洲一区二区成人| 另类激情亚洲| 亚洲制服av| 亚洲国产1区| 欧美午夜不卡影院在线观看完整版免费 | 99国产精品久久久久久久| 欧美一区二区三区在线视频 | 国产欧美一区二区精品秋霞影院| 久久爱www.| 亚洲免费观看在线视频| 久久久国产成人精品| 亚洲美女精品成人在线视频| 国产精品影视天天线| 免费欧美在线视频| 亚洲女人小视频在线观看| 欧美黄色大片网站| 午夜久久久久久| 亚洲美女av电影| 国模精品一区二区三区| 欧美日韩在线三级| 免费视频一区| 久久精品国产精品| 亚洲图片欧美日产| 亚洲人成网站在线观看播放| 久久天堂av综合合色| 亚洲综合视频网| 99视频一区| 亚洲国产精品va在线观看黑人| 国产精品二区三区四区| 免费久久久一本精品久久区| 久久xxxx精品视频| 亚洲性xxxx| 一本色道久久88精品综合| 亚洲国产天堂久久综合| 免费观看欧美在线视频的网站| 篠田优中文在线播放第一区| 99国产精品| 亚洲精品一区二区三区樱花| 伊人久久大香线蕉av超碰演员| 国产精品天美传媒入口| 国产精品99一区二区| 欧美理论视频| 欧美精品三级日韩久久| 欧美黄色片免费观看| 男人插女人欧美| 欧美mv日韩mv亚洲| 免费一级欧美片在线观看| 久久免费视频一区| 久久综合九色| 欧美成人亚洲成人| 麻豆av一区二区三区久久| 久久久久久久久综合| 久久人人爽人人爽爽久久| 久久精品视频免费播放| 久久久久国产精品厨房| 久久久久久久久一区二区| 久久久亚洲欧洲日产国码αv | 在线日韩中文字幕| 激情综合激情| 国外视频精品毛片| 亚洲高清视频的网址| 亚洲欧洲另类国产综合| 亚洲狼人精品一区二区三区| 亚洲开发第一视频在线播放| 99国产一区二区三精品乱码| 一道本一区二区| 亚洲一本大道在线| 欧美一级视频免费在线观看| 欧美自拍偷拍| 欧美成人有码| 日韩午夜在线| 亚洲欧美日韩国产一区| 久久激五月天综合精品| 蜜桃av一区二区在线观看| 欧美肥婆bbw| 国产精品久久久久久久久免费樱桃| 欧美性事在线| 韩国av一区二区三区| 最新高清无码专区| 亚洲视频免费看| 久久精品日韩欧美| 亚洲国产99| 亚洲天堂av电影| 久久精品国产免费看久久精品| 免费影视亚洲| 国产精品理论片| ●精品国产综合乱码久久久久| 亚洲精品日韩一| 久久精品二区亚洲w码| 亚洲电影免费在线| 亚洲天堂免费观看| 巨乳诱惑日韩免费av| 国产精品卡一卡二| 亚洲国产91| 欧美在线视频观看| 亚洲国产网站| 欧美在线中文字幕| 欧美日韩精品在线观看| 国产在线观看一区| 亚洲视频999| 免费中文字幕日韩欧美| 亚洲小说欧美另类婷婷| 欧美电影资源| 激情五月婷婷综合| 午夜伦理片一区| 亚洲欧洲日产国码二区| 久久成人免费视频| 国产精品激情电影| 亚洲欧洲一区| 久久亚洲春色中文字幕久久久| 一区二区三区日韩精品视频| 久久天天狠狠| 国产日本精品| 亚洲欧美另类在线| 亚洲精品人人| 欧美成人午夜77777| 黄色成人精品网站| 欧美亚洲自偷自偷| 一区二区三区日韩精品视频| 欧美夫妇交换俱乐部在线观看| 国产一区日韩欧美| 午夜精品一区二区三区在线播放| 亚洲日本电影在线| 浪潮色综合久久天堂| 一区二区自拍| 久久久国产精品一区二区中文| 在线视频欧美日韩精品| 欧美日本在线观看| 亚洲精品在线观| 欧美激情2020午夜免费观看| 久久精品官网| 黄色亚洲在线| 老司机一区二区三区| 久久不射网站| 国产真实乱子伦精品视频| 久久成人综合网| 欧美影视一区| 韩国视频理论视频久久| 久久精品女人的天堂av| 性色一区二区三区| 国产欧美在线看| 久久一区二区三区av|