zoukankan      html  css  js  c++  java
  • sscanf正则表达式用法简介

    简介

    其实sscanf 中的筛选条件并不是严格意义上的正则表达式,只能说是正则表达式的简化版本,直接套用正则表达式可能出错。比如:

    1. 正则表达式中星号*、问号?、加号+、{n,m}分别表示匹配≥0、1个、≥1、n~m个字符,而sscanf中默认匹配任意多个满足条件的字符,直到遇到不满足条件的字符(即相当于默认只有正则表达式星号* 号的功能),不可再使用星号*、问号?、加号+、{n,m}

    2. sscanf筛选条件中需要规定匹配字符个数时,应在%或%*后面加上相应数字

    用法示例

    /*提取字符串括号里的字符*/
    #include<cstdio>
    #include<cstring>
    int main(){
       char str[256];
       sscanf("First (helloWorld): last","%*[^(](%[^)]%*[^
    ]",str);
       printf("$%s$
    ",str); //输出$helloWorld$
       sscanf("First (helloWorld): last","%*[^(](%5[^)]%*[^
    ]",str); //限定5个字符
       printf("$%s$
    ",str); //输出$hello$
       return 0;
    }
    /*
       %*[^(]  	连续匹配非左括号字符First 并丢弃之,遇到左括号停止
       ( 		匹配并丢弃左括号
       %[^)]  	连续匹配非右括号字符helloWorld(遇到右括号停止)并赋值给str
       %*[^
    ] 	连续匹配非换行符的字符,遇到换行符停止(不接收换行符),这部分可省略,不影响结果
       %5[^)]  	限定只匹配5个字符
    */
    

    符号说明

    1. % 代表选择,后跟相应条件
    2. %* 代表过滤(即连续匹配满足条件的字符,并丢弃)
    3. %%* 后面紧跟的数字代表匹配的字符个数
    4. %5[^)]代表匹配5个非)的字符,[]内是筛选的条件,^表示否定,如%[a-z]表示接收小写字母,%[A-Z0-9] 表示接收大写字母及数字
    5. 要匹配中间的字符时,应先将前面的字符用%*过滤掉

    拓展

    1. 提取子串

    // 读取行,并提取第一个括号里的子串
    #include <stdio.h>
    
    int main() {
      char line[256], str[128];
    
      while (fgets(line, sizeof line, stdin)) {
        sscanf(line, "%*[^(](%127[^)]", str);
        printf("|%s|
    ", str);
      }
    
      return 0;
    }
    

    运行样例:

    one (two) three
    |two|
    four (five) six
    |five|
    seven eight (nine) ten
    |nine|
    

    2. 字符串在printfscanf中的使用

    • printf("%5.3s",str+2);表示从str[2]开始输出字符串的至多3个字符,输出不足5位则在左侧用空格补足
    • scanf("%3s",str); 从输入流中提取3个字符赋给str

    参考资料:https://stackoverflow.com/a/24483494/12634621

  • 相关阅读:
    正则表达式周二挑战赛 第七周
    [译]视区百分比,canvas.toBlob()以及WebRTC
    [译]因扩展Object.prototype而引发Object.defineProperty不可用的一个问题
    [译]JavaScript需要类吗?
    [译]JavaScript中几种愚蠢的写法
    [译]JavaScript中对象的属性
    JavaScript:数组的length属性
    [译]JavaScript中的变量声明:你可以打破的三条规则
    [译]ES6:JavaScript中将会有的几个新东西
    [译]ECMAScript 6中的集合类型,第三部分:WeakMap
  • 原文地址:https://www.cnblogs.com/DreamEagle/p/12553181.html
Copyright © 2011-2022 走看看