• 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

  • 相关阅读:
    sqlserver游标概念与实例全面解说
    Dos网络查看命令
    SQL Server和Access数据读写
    表中记录查询排序(设置排序规则)
    sql server中扩展存储过程
    sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结)
    合并有数据的列
    防止用户同时使用一个存储过程
    (转载) 两个数据库比较 对比视图存储过程及表结构差异
    Sql Server REPLACE函数的使用
  • 原文地址:https://www.cnblogs.com/DreamEagle/p/12553181.html
Copyright © 2020-2023  润新知