1. 程式人生 > >在linux下,如何在C語言中使用正則表示式

在linux下,如何在C語言中使用正則表示式

使用POSIX函式庫中的Regex系列函式來說明在Linux c下如何使用正則表示式


#include <stdio.h>
#include <sys/types.h>
#include <regex.h>
#include <stdlib.h>
#include <string.h>

#define ERRBUF 128

static char * substr(const char * str, unsigned start, unsigned end);

int main(int argc, char *argv[])
{
        regex_t myreg;
        char err[ERRBUF];
        int resulta,resultb;
        regmatch_t match[4];
        size_t nmatch = 4;

        char pattern[] = "[0-9]{3}";

        resulta = regcomp(&myreg, pattern, REG_EXTENDED
| REG_NEWLINE);

        if(resulta != 0)
        {
                fprintf(stderr, "pattern compiled error\n");
                regerror(resulta, &myreg, err, sizeof(err));
                regfree(&myreg);
                exit(1);
        }

        char mystring[] = "192.168.121.112";

        resultb = regexec(&myreg, mystring, nmatch, match, 0);
        if(resultb != 0)
        {
                regerror(resultb, &myreg, err, sizeof(err));
                regfree(&myreg);
                exit(1);
        }

        int x;
        for(x = 0; x < nmatch && match[x].rm_so != -1; x++)
{
                printf("%s\n",substr(mystring, match[x].rm_so, match[x].rm_eo));
}

        printf("x = %d\n",x);
        regfree(&myreg);
        return 0;
}

static char * substr(const char * str, unsigned start, unsigned end)
{
        unsigned n = end - start;
        static char strbuf[256];
        memset(strbuf,'\0',sizeof(strbuf));
        strncpy(strbuf, str + start ,n);
        strbuf[n] = '\0';
        return strbuf;
}

注意:不支援使用 \d 來匹配數字

相關推薦

LinuxC語言獲取硬碟大小

        由於系統中沒有現成的程式碼可以直接獲取某個硬碟的大小,此時可以藉助popen,sscanf,fdisk命令共同完成硬碟大小的獲取。         工件原理如下,在linux中執行fdisk -l命令,獲取硬碟的詳細資訊,然後在C程式中通過popen將資訊獲

linuxshell 程式設計之擴充套件表示式

1. ‘+’ 限定字元 +限定符表示前面字元至少出現一次或者多次。與*不同在於0次或者多次 2. '?' 限定符 ?限定前面的字元最多出現一次。即出現0次或者1次 3. 數線 |和圓括號() 例如

linux 利用ls grep 和表示式實現目錄和檔案的分開顯示

要列出當前目錄下所有的檔名和目錄名直接使用ls命令即可。但如何只列出檔名而不列出目錄呢?查遍了ls 的幫助,也沒看到有這個現成的選項。幸好這個問題還是比較常見的,網上已經有了一些解答,但實驗之後,我發現看到的幾個連結給出的解決方法都是不完全正確的。具體如下。一、網上流傳的解

linux C語言處理表達式

man cte 得到 rsquo like pre 首地址 添加 有效 Linux下C語言處理正則表達式——regex.h 具體函數介紹 編譯正則表達式函數 int regcomp(regex_t *preg, const char *re

LinuxC語言開發

xuni autoconf htm 參加 eve http 學習資料 inux c語言開發 工具 學會使用vim/emacs,vim/emacs是linux下最常用的源碼編輯具,不光要學會用它們編輯源碼,還要學會用它們進行查找、定位、替換等。 學會makefile文件的編

Go語言表達式的使用

Go語言正則表達式 Go語言正則表達式的使用 Go語言 正則表達式 許多程序語言都支持使用正則表達式對字符串進行操作,Go語言也不例外,正則表達式的語法網上很多教程,本文主要介紹在Go語言中如何使用正則表達式,通過以下實例進行說明,並添加了詳細的註釋,不會的小夥伴一看就明白了。 func ma

linux編譯c語言教程

準備工作 - Linux系統 - 懂得Linux系統下編輯器vim/vi軟體的使用 - 懂得簡易的c語言程式設計(初次學習的同學可以直接複製文章末尾的原始碼) 總結一下:有Linux系統,會使用Linux系統下的文字編輯器,有一點c語言基礎即可。 建立c語言檔案並編譯

Python表示式對單個字元多個字元匹配邊界等使用

         Regular Expression,正則表示式,又稱正規表示式、正規表示法、正則表示式、規則表示式、常規表示法(英語:Regular Expression,在程式碼中常簡寫為regex、regexp或RE),是電腦科學的一個概

Linux expect 指令碼語言互動處理常用命令

Linux 下 expect 指令碼語言中互動處理常用命令 Linux 下 expect 指令碼語言中互動處理常用命令 1. #!/usr/bin/expect 告訴作業系統腳本里的程式碼使用那一個 shell 來執行。這裡的 expect 其實和 Linux 下的 bash、win

LinuxC語言函式perror

perror的函式原型為`void perror(const char *s)` 這個函式會先輸出你傳給他的實參 s 所指的字串,後面再加上錯誤原因字串。此錯誤原因依照全域性變數errno 的值來決定要輸出的字串。 在庫函式中有個errno變數,每個errno值對應著以字串表示的錯誤型別。當

linuxc語言系統函式呼叫

目錄 4.linux下的系統函式的使用 c語言 4.1數學函式的使用 1pow函式 2.exp函式 3.log函式 4.rand()隨機數函式 4.2字元函式的使用 4.3系統時間與日期函式的使用 系統時間 時間間隔 4.4環境控制函式 &nb

Linuxc語言實現發送http請求 方式可以Get或者Post例程參考

sockaddr select sleep online 創建 線程終止 index -s lse [1].[代碼] Linux下用c語言實現發送http請求 方式可以Get或者Post 跳至 [1] ? 1 2 3 4 5 6 7 8 9 10 11 12 1

Linuxc語言實現傳送http請求 方式可以Get或者Post例程參考

[1].[程式碼] Linux下用c語言實現傳送http請求 方式可以Get或者Post 跳至 [1] ? 1 2

第一個linuxc語言程式

當然是列印hello world啦。  1.vim helloworld.c如下: #include <stdio.h> int main() { char *c; c = "hello world!"; printf("%s\n",c

linuxC語言開發(程序等待)

                【 宣告:版權所有,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    所謂程序等待,其實很簡單。前面我們說過可以用fork建立子程序,那麼這裡我們就可以使用wait函式讓父程序等待子程序執行結束後才開始執行。注意,為了證明父程序確實是等

linuxC語言開發(訊號處理)

                【 宣告:版權所有,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    訊號處理是linux程式的一個特色。用訊號處理來模擬作業系統的中斷功能,對於我們這些系統程式設計師來說是最好的一個選擇了。要想使用訊號處理功能,你要做的就是填寫一個訊

Linuxc語言實現傳送http請求

前言 在linux下,使用socket進行程式設計,需要到伺服器上進行獲取資料,伺服器使用的php程式設計,需要使用http的方式進行獲取資料。 程式碼 #include <stdio.h> #include <string.h&

linux分割字串已經如何匹配日期與IP

今天專案需要在linux下將一個字串中的ip與日期提取出來,因為查了挺多資料,記到這裡方便以後檢視。 linux下分割字串 linux下分割字串可以使用命令expr,expr有許多功能,具體的使用方法可以使用man檢視,這裡只介紹分割字串的功能。 ex

JS表示式詳解及最基本的判斷手機號郵箱身份證

    首先最基本的符號型別及含義整理一下。     1,最基本的符號:^  $  *  +  ?         ^    代表字串的開始位置 &nbs

關於js表示式使用的一些簡單實現比如驗證QQ號碼郵箱ip等等...

// 1. 簡單的匹配qq號碼(9位數字) var str = "123456788"; var regex1 = /^(\d{9})$/g; str.match(regex1); // 或者 var str = "niahfdb1345342123"