微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用正则expression式使用scanf

我一直试图在scanf上使用正则expression式,以读取最多n个字符的string,并丢弃其他任何内容,直到换行符为止。 任何空格都应该被当作普通字符处理,因此包含在要读取的string中。 我学习了一篇关于正则expression式的维基百科文章,但是我无法让scanf正常工作。 这里是我尝试过的一些代码

scanf("[ ]*%ns[ ]*[n]",string);

[]应该用于实际的空格字符,*应该表示一个或多个,n是要读取的字符数,string是用malloc分配的指针。 我尝试了几种不同的组合; 然而,我倾向于只读取一个句子的第一个字读(停在空格字符)。 此外,*似乎放弃了一个字符,而不是意味着“零或多”…

有谁可以详细解释scanf是如何解释正则expression式的? 更重要的是,重复使用getc是否有效?

先谢谢了

剥离未列入白名单的URL中的任何参数

使用find或grep来定位来自不同编码系统(Windows到Linux)的重音字符的文件名,

为什么POSIX“可打印的字符”类不匹配一个简单的string?

如果我不知道确切的文件path,Perl如何检测文件

stringpattaren匹配使用awk

如何用正则expression式匹配/黑名单?

Apache重写URL中的string – 障碍在查询中是“?”

剪切部分grep输出与sed

GREP和REGEX有问题

Linux工具 – 如何统计和列出文件中的正则expression式

简短的回答: scanf不会从字面上处理正则表达式。

如果你想在C中使用正则表达式,你可以使用正则表达式POSIX库。 有关此库用法的基本示例,请参见以下问题: C中的正则表达式:示例?

现在,如果你想这样做的scanf方式,你可以尝试类似的东西

scanf("%*[ ]%ns%*[ ]n",str);

将%ns的n替换为从输入流中读取的最大字符数。 %*[ ]部分要求忽略任何空格。 您可以用特定的数字替换*以忽略精确数量的字符。 您可以在大括号之间添加其他字符以忽略更多空间。

不知道上面的scanf是否可以工作,因为空格也是与%s指令匹配%s

我肯定会用fgets调用,然后用下面的方式修剪周围的空格: 如何以标准方式修剪前导/尾随空格?

重复使用getc是否有效?

在应用程序上有所不同,但是,重复getc()是有效的。

除非我读错了,%[^' n']将保存所有内容,直到遇到回车。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐