glibc中的正規表示式處理

2021-09-30 05:13:45 字數 1281 閱讀 3810

(1) regexec是否執行緒安全?

這個函式是glibc中的,至於他是否是執行緒安全,我先搜了一下,好像沒有人說。

對於這種庫函式最好小心使用,摸清底細先。

看來只能到libc中尋找答案了,

實現**如下:

intregexec (preg, string, nmatch, pmatch, eflags)

const regex_t *__restrict preg;

const char *__restrict string;

size_t nmatch;

regmatch_t pmatch;

int eflags;

else

__libc_lock_lock (dfa->lock);

if (preg->no_sub)

err = re_search_internal (preg, string, length, start, length - start,

length, 0, null, eflags);

else

err = re_search_internal (preg, string, length, start, length - start,

length, nmatch, pmatch, eflags);

__libc_lock_unlock (dfa->lock);

return err != reg_noerror;

}確實是執行緒安全的。

(2) 記得用regfree釋放regex_t

其實看看regex_t的實現就知道了, 裡面有一塊buffer來的。

typedef struct re_pattern_buffer regex_t;

struct re_pattern_buffer

;(3)  使用例子:

string strregex = "....";  //正規表示式字串

string strvalue = "...";    //拿來匹配的字串

regex_t reg;

if (regcomp(®, strregex.c_str(), reg_extended) != 0)

else if (nret != 0)

//rm_so 正規表示式在目標串中的起始位置, rm_eo匹配到**

if(stregmatch.rm_so == 0 && stregmatch.rm_eo == (int)(strvalue.length()))

regfree(®);

return false;

正規表示式相關 正規表示式處理html內容

前面關於顯示html文字用了瀏覽器控制項來處理 這個不過是為了解決燃眉之急不得已才使用。其實最好還是使用正規表示式處理,也就是自己寫乙個html文字直譯器,當然這個實現起來也是不容易的,首先你得將所有html文字標籤羅列出來,然後一一翻譯。下面先搞乙個簡單的例子吧。public static str...

sql正規表示式 SQL中的正規表示式

sql正規表示式 sql中的正規表示式 sql的查詢語句中,有時會需要引進正規表示式為其複雜搜尋指定模式。下面給出一些 regexp 在mysql 語句中應用 非全部 1 匹配字串的開始部分。mysql select fo nfo regexp fo 0mysql select fofo regex...

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...