(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...