當前位置:首頁 » 編程語言 » c語言正則

c語言正則

發布時間: 2022-01-12 07:59:13

『壹』 c語言下如何用正則或者字元串查找匹配特定字元串並提取出來

在字元串中查找字元串是吧

#include<stdio.h>
intfun(char*str,char*find)
{
inti,j,n=0;
for(i=0;str[i];i++)
{
if(str[i]==find[0])
for(j=1;;j++)
{
if(find[j]==0)returni+1;//返回位置
if(find[j]==str[i+j])n++;
elsebreak;
}
}
return0;//不存在返回0
}
intmain()
{
charstr[]="onetwothree",find[]="two";
printf("%d ",fun(str,find));
return0;
}

『貳』 C語言用正則表達式的例子

在格式化輸入的時候可以用正則表達式
其它地方貌似沒有應用。
123456int i;char str[80], str2[80];scanf("%d%[abc]%s", &i, str, str2); scanf("%[a-zA-Z0-9]", str);scanf("%[^abce]", str);scanf("%[^a-z]", str);
這幾個都是用正則表達式的。
如果不理解
可以自己搜一下
scanf
正則表達式
網上有很多人講的,我就不復制了。

『叄』 C語言怎麼用正則表達式

1、標準的C和C++都不支持正則表達式,但有一些函數庫可以輔助C/C++程序員完成這一功能,其中最著名的當數Philip Hazel的Perl-Compatible Regular Expression庫,許多Linux發行版本都帶有這個函數庫。
2、C/C++ 中使用正則表達式一般分為三步:
1)編譯正則表達式 regcomp()
int regcomp (regex_t *compiled, const char *pattern, int cflags)
這個函數把指定的正則表達式pattern編譯成一種特定的數據格式compiled,這樣可以使匹配更有效。函數regexec 會使用這個數據在目標文本串中進行模式匹配。執行成功返回0。
2)匹配正則表達式 regexec()
int regexec (regex_t *compiled, char *string, size_t nmatch, regmatch_t matchptr [], int eflags)
當編譯好正則表達式後,就可以用regexec 匹配我們的目標文本串了,如果在編譯正則表達式的時候沒有指定cflags的參數為REG_NEWLINE,則默認情況下是忽略換行符的,也就是把整個文本串當作一個字元串處理。執行成功返回0。
3)釋放正則表達式 regfree()
void regfree (regex_t *compiled)
當使用完編譯好的正則表達式後,或者要重新編譯其他正則表達式的時候,可以用這個函數清空compiled指向的regex_t結構體的內容。請注意,如果是重新編譯的話,一定要先清空regex_t結構體。

『肆』 C語言正則表達式支持中文英文數字以及「_」該怎麼寫,求大佬們指教

俺寫了一個: /^\S[a-zA-Z\s\d\u4e00-\u9fa5]+\S$/如果符合要求,很不介意,你再追加幾百分給俺的。若不符合請聯系俺。。。

『伍』 如何在C語言中巧用正則表達式

sscanf
取僅包含指定字元集的字元串。如在下例中,取僅包含1到9和小寫字母的字元串。
sscanf("123456abcdedfBCDEF","%[1-9a-z]",buf);
printf("%s\n",buf);

給定一個字元串iios/12DDWDFF@122,獲取 / 和 @ 之間的字元串,先將 "iios/"過濾掉,再將非'@'的一串內容送到buf中
sscanf("iios/12DDWDFF@122","%*[^/]/%[^@]",buf);
printf("%s\n",buf);

結果為:123456abcdedf
http://ke..com/link?url=ZO-DAritgCoX9mmRA--1WbzOKbzEn-5T4MhgljTpSCt-Fq

『陸』 C語言中如何使用正則表達式 詳細�0�3

由於它可以極大地簡化處理字元串時的復雜度,因此現在已經在許多 L i n u x 實用工具中得到了應用。千萬不要以為正則表達式只是 P e r l 、 P y t h o n 、 B a s h 等腳本語言的專利,作為 C 語言程序員,用戶同樣可以在自己的程序中運用正則表達式。標準的 C 和 C + + 都不支持正則表達式,但有一些函數庫可以輔助 C / C + + 程序員完成這一功能,其中最著名的當數 P h i l i p H a z e l 的 P e r l - C o m p a t i b l e R e g u l a r E x p r e s s i o n 庫,許多 L i n u x 發行版本都帶有這個函數庫。編譯正則表達式為了提高效率,在將一個字元串與正則表達式進行比較之前,首先要用 r e g c o m p ( ) 函數對它進行編譯,將其轉化為 r e g e x _ t 結構: i n t r e g c o m p ( r e g e x _ t * p r e g , c o n s t c h a r * r e g e x , i n t c f l a g s ) ; 參數 r e g e x 是一個字元串,它代表將要被編譯的正則表達式;參數 p r e g 指向一個聲明為 r e g e x _ t 的數據結構,用來保存編譯結果;參數 c f l a g s 決定了正則表達式該如何被處理的細節。如果函數 r e g c o m p ( ) 執行成功,並且編譯結果被正確填充到 p r e g 中後,函數將返回 0 ,任何其它的返回結果都代表有某種錯誤產生。匹配正則表達式一旦用 r e g c o m p ( ) 函數成功地編譯了正則表達式,接下來就可以調用 r e g e x e c ( ) 函數完成模式匹配: i n t r e g e x e c ( c o n s t r e g e x _ t * p r e g , c o n s t c h a r * s t r i n g , s i z e _ t n m a t c h , r e g m a t c h _ t p m a t c h [ ] , i n t e f l a g s ) ; t y p e d e f s t r u c t { r e g o f f _ t r m _ s o ; r e g o f f _ t r m _ e o ; } r e g m a t c h _ t ; 參數 p r e g 指向編譯後的正則表達式,參數 s t r i n g 是將要進行匹配的字元串,而參數 n m a t c h 和 p m a t c h 則用於把匹配結果返回給調用程序,最後一個參數 e f l a g s 決定了匹配的細節。在調用函數 r e g e x e c ( ) 進行模式匹配的過程中,可能在字元串 s t r i n g 中會有多處與給定的正則表達式相匹配,參數 p m a t c h 就是用來保存這些匹配位置的,而參數 n m a t c h 則告訴函數 r e g e x e c ( ) 最多可以把多少個匹配結果填充到 p m a t c h 數組中。當 r e g e x e c ( ) 函數成功返回時,從 s t r i n g + p m a t c h [ 0 ] . r m _ s o 到 s t r i n g + p m a t c h [ 0 ] . r m _ e o 是第一個匹配的字元串,而從 s t r i n g + p m a t c h [ 1 ] . r m _ s o 到 s t r i n g + p m a t c h [ 1 ] . r m _ e o ,則是第二個匹配的字元串,依此類推。釋放正則表達式無論什麼時候,當不再需要已經編譯過的正則表達式時,都應該調用函數 r e g f r e e ( ) 將其釋放,以免產生內存泄漏。 v o i d r e g f r e e ( r e g e x _ t * p r e g ) ; 函數 r e g f r e e ( ) 不會返回任何結果,它僅接收一個指向 r e g e x _ t 數據類型的指針,這是之前調用 r e g c o m p ( ) 函數所得到的編譯結果。如果在程序中針對同一個 r e g e x _ t 結構調用了多次 r e g c o m p ( ) 函數, P O S I X 標准並沒有規定是否每次都必須調用 r e g f r e e ( ) 函數進行釋放,但建議每次調用 r e g c o m p ( ) 函數對正則表達式進行編譯後都調用一次 r e g f r e e ( ) 函數,以盡早釋放佔用的存儲空間。報告錯誤信息如果調用函數 r e g c o m p ( ) 或 r e g e x e c ( ) 得到的是一個非 0 的返回值,則表明在對正則表達式的處理過程中出現了某種錯誤,此時可以通過調用函數 r e g e r r o r ( ) 得到詳細的錯誤信息。 s i z e _ t r e g e r r o r ( i n t e r r c o d e , c o n s t r e g e x _ t * p r e g , c h a r * e r r b u f , s i z e _ t e r r b u f _ s i z e ) ; 參數 e r r c o d e 是來自函數 r e g c o m p ( ) 或 r e g e x e c ( ) 的錯誤代碼,而參數 p r e g 則是由函數 r e g c o m p ( ) 得到的編譯結果,其目的是把格式化消息所必須的上下文提供給 r e g e r r o r ( ) 函數。在執行函數 r e g e r r o r ( ) 時,將按照參數 e r r b u f _ s i z e 指明的最大位元組數,在 e r r b u f 緩沖區中填入格式化後的錯誤信息,同時返回錯誤信息的長度。應用正則表達式最後給出一個具體的實例,介紹如何在 C 語言程序中處理正則表達式。 # i n c l u d e < s t d i o . h > ; # i n c l u d e < s y s / t y p e s . h > ; # i n c l u d e < r e g e x . h > ; / * 取子串的函數 * / s t a t i c c h a r * s u b s t r ( c o n s t c h a r * s t r , u n s i g n e d s t a r t , u n s i g n e d e n d ) { u n s i g n e d n = e n d - s t a r t ; s t a t i c c h a r s t b u f [ 2 5 6 ] ; s t r n c p y ( s t b u f , s t r + s t a r t , n ) ; s t b u f [ n ] = 0 ; r e t u r n s t b u f ; } / * 主程序 * / i n t m a i n ( i n t a r g c , c h a r * * a r g v ) { c h a r * p a t t e r n ; i n t x , z , l n o = 0 , c f l a g s = 0 ; c h a r e b u f [ 1 2 8 ] , l b u f [ 2 5 6 ] ; r e g e x _ t r e g ; r e g m a t c h _ t p m [ 1 0 ] ; c o n s t s i z e _ t n m a t c h = 1 0 ; / * 編譯正則表達式 * / p a t t e r n = a r g v [ 1 ] ; z = r e g c o m p ( & r e g , p a t t e r n , c f l a g s ) ; i f ( z ! = 0 ) { r e g e r r o r ( z , & r e g , e b u f , s i z e o f ( e b u f ) ) ; f p r i n t f ( s t d e r r , " % s : p a t t e r n ' % s ' \ n " , e b u f , p a t t e r n ) ; r e t u r n 1 ; } / * 逐行處理輸入的數據 * / w h i l e ( f g e t s ( l b u f , s i z e o f ( l b u f ) , s t d i n ) ) { + + l n o ; i f ( ( z = s t r l e n ( l b u f ) ) > ; 0 & & l b u f [ z - 1 ] = = ' \ n ' ) l b u f [ z - 1 ] = 0 ; / * 對每一行應用正則表達式進行匹配 * / z = r e g e x e c ( & r e g , l b u f , n m a t c h , p m , 0 ) ; i f ( z = = R E G _ N O M A T C H ) c o n t i n u e ; e l s e i f ( z ! = 0 ) { r e g e r r o r ( z , & r e g , e b u f , s i z e o f ( e b u f ) ) ; f p r i n t f ( s t d e r r , " % s : r e g c o m ( ' % s ' ) \ n " , e b u f , l b u f ) ; r e t u r n 2 ; } / * 輸出處理結果 * / f o r ( x = 0 ; x < n m a t c h & & p m [ x ] . r m _ s o ! = - 1 ; + + x ) { i f ( ! x ) p r i n t f ( " % 0 4 d : % s \ n " , l n o , l b u f ) ; p r i n t f ( " $ % d = ' % s ' \ n " , x , s u b s t r ( l b u f , p m [ x ] . r m _ s o , p m [ x ] . r m _ e o ) ) ; } } / * 釋放正則表達式 * / r e g f r e e ( & r e g ) ; r e t u r n 0 ; } 上述程序負責從命令行獲取正則表達式,然後將其運用於從標准輸入得到的每行數據,並列印出匹配結果。執行下面的命令可以編譯並執行該程序: # g c c r e g e x p . c - o r e g e x p # . / r e g e x p ' r e g e x [ a - z ] * ' < r e g e x p . c 0 0 0 3 : # i n c l u d e < r e g e x . h > ; $ 0 = ' r e g e x ' 0 0 2 7 : r e g e x _ t r e g ; $ 0 = ' r e g e x ' 0 0 5 4 : z = r e g e x e c ( & r e g , l b u f , n m a t c h , p m , 0 ) ; $ 0 = ' r e g e x e c ' 小結對那些需要進行復雜數據處理的程序來說,正則表達式無疑是一個非常有用的工具。本文重點在於闡述如何在 C 語言中利用正則表達式來簡化字元串處理,以便在數據處理方面能夠獲得與 P e r l 語言類似的靈活性。

『柒』 如何在C語言中使用正則表達式

看到大家討論這方面的東西,作點貢獻聊表各位高手對這個版快的無私奉獻 :oops:

如果用戶熟悉Linux下的sed、awk、grep或vi,那麼對正則表達式這一概念肯定不會陌生。由於它可以極大地簡化處理字元串時的復雜
度,因此現在已經在許多Linux實用工具中得到了應用。千萬不要以為正則表達式只是Perl、Python、Bash等腳本語言的專利,作為C語言程序
員,用戶同樣可以在自己的程序中運用正則表達式。

標準的C和C++都不支持正則表達式,但有一些函數庫可以輔助C/C++程序員完成這一功能,其中最著名的當數Philip Hazel的Perl-Compatible Regular Expression庫,許多Linux發行版本都帶有這個函數庫。

編譯正則表達式

為了提高效率,在將一個字元串與正則表達式進行比較之前,首先要用regcomp()函數對它進行編譯,將其轉化為regex_t結構:

int regcomp(regex_t *preg, const char *regex, int cflags);

參數regex是一個字元串,它代表將要被編譯的正則表達式;參數preg指向一個聲明為regex_t的數據結構,用來保存編譯結果;參數cflags決定了正則表達式該如何被處理的細節。

如果函數regcomp()執行成功,並且編譯結果被正確填充到preg中後,函數將返回0,任何其它的返回結果都代表有某種錯誤產生。

匹配正則表達式

一旦用regcomp()函數成功地編譯了正則表達式,接下來就可以調用regexec()函數完成模式匹配:

int regexec(const regex_t *preg, const char *string, size_t nmatch,regmatch_t pmatch[], int eflags);
typedef struct {
regoff_t rm_so;
regoff_t rm_eo;
} regmatch_t;

參數preg指向編譯後的正則表達式,參數string是將要進行匹配的字元串,而參數nmatch和pmatch則用於把匹配結果返回給調用程序,最後一個參數eflags決定了匹配的細節。

在調用函數regexec()進行模式匹配的過程中,可能在字元串string中會有多處與給定的正則表達式相匹配,參數pmatch就是用來保
存這些匹配位置的,而參數nmatch則告訴函數regexec()最多可以把多少個匹配結果填充到pmatch數組中。當regexec()函數成功返
回時,從string+pmatch[0].rm_so到string+pmatch[0].rm_eo是第一個匹配的字元串,而從
string+pmatch[1].rm_so到string+pmatch[1].rm_eo,則是第二個匹配的字元串,依此類推。

釋放正則表達式

無論什麼時候,當不再需要已經編譯過的正則表達式時,都應該調用函數regfree()將其釋放,以免產生內存泄漏。

『捌』 求c語言正則表達式達人解答

/[1-255]\.[0-255]\.[0-255]\.[1-255]/ 我覺得有問題,但不知道哪的問題。不測試就提交的程序員都該拖出去打!我建議你測試一下……

『玖』 C語言正則表達式

現在很多種語言都支持正則表達式,據說有個老外的書不錯,精通正則表達式,哎,可惜,我們這小地方買本書比較難,C語言當然支持,許多主流語言都支持,正則表達式可以很大的提升效率,一段小代碼就能實現長篇大論的程序,很精彩

『拾』 C語言有正則表達式嗎

1、標準的C和C++都不支持正則表達式,但有一些函數庫可以輔助C/C++程序員完成這一功能,其中最著名的當數Philip Hazel的Perl-Compatible Regular Expression庫,許多Linux發行版本都帶有這個函數庫。

熱點內容
安卓手機怎麼轉移蘋果系統 發布:2024-09-17 04:19:07 瀏覽:934
sql從表中查詢數據 發布:2024-09-17 04:19:07 瀏覽:972
米粒泥解壓 發布:2024-09-17 04:19:01 瀏覽:729
2010word加密方法 發布:2024-09-17 04:17:36 瀏覽:282
crv哪個配置性價比高2021 發布:2024-09-17 04:07:51 瀏覽:36
wincc圖形編譯在哪裡 發布:2024-09-17 03:58:26 瀏覽:978
androidubuntu 發布:2024-09-17 03:50:27 瀏覽:702
識夢源碼 發布:2024-09-17 03:50:18 瀏覽:27
諾基亞密碼忘了打什麼電話 發布:2024-09-17 03:27:09 瀏覽:556
樹深度優先演算法 發布:2024-09-17 03:26:58 瀏覽:474