scanf()正則表達式的使用


[]內是匹配的字符,^表示求反集,當遇到非集合內的字符時立即終止輸入

1. 輸入指定范圍的小寫字母,遇到非法字符立即終止

scanf("%[a-z]",str1);

printf("%s\n",str1);

輸入:abc123

輸出:abc

//輸入帶空格的自定范圍的字符串

scanf("%[a-z A-Z0-9]", str1);

printf("%s\n",str1);

輸入:abc123 def 456

輸出:abc123

scanf("%[a-z0-9]", str1);

printf("%s\n",str1);

輸入:abc123

輸出:abc123

2. 輸入不包括指定字符的字符

scanf("%[^a-z]", str1);

printf("%s\n",str1);

輸入:123 456abc123

輸出:123 456

注意:這種方式可以讀入空格



scanf("%[^\n]", str1);

printf("%s\n",str1);

//讀入一整行字符串,包括空格

輸入:abc123 def

輸出:abc123 def


scanf("%[^a-d0-9]", str1);

printf("%s\n",str1);

輸入:efxy89

輸出:efxy

我們來看看百分號表示什么意思:

%表示選擇,%后面的是條件,比如"%s",s是一個條件,表示任意字符,"%s"的意思是:只要輸入的東西是一個字符,就把它拷貝給str。"%3s"又多了一個條件:只拷貝3個字符。 “%[a-z]”的條件稍微嚴格一些,輸入的東西不但是字符,還得是一個小寫字母的字符。

%* 與%剛好相反,表示過濾滿足條件的字符,也就是跳過滿足條件的字符,其后一定要有新的%語句,否則無法讀入

3. 跳過指定范圍的字符再讀取指定范圍的字符

scanf("%*[a-z0-9]%[^\n]",str1);

printf("%s\n",str1);

輸入:a1b2c3ABCdef 123

輸出:ABC

4. %和%*組合使用可以提取指定字符串

從<sip:tom@172.18.1.133>中提取tom

const char* url = "<sip:tom@172.18.1.133>";

char uri[10] = {0};

sscanf(url,"%*[^:]:%[^@]", uri);

printf("%s ",uri);

從iios/12DDWDFF@122中提取12DDWDFF

const char* s = "iios/12DDWDFF@122";

char buf[20];

sscanf(s, "%*[^/]/%[^@]", buf);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM