scanf正则表达式-C

在编写以下序列之前,我需要读取一个字符串:\ nx \ n:


(.....)\n

x\n

\ n是换行符,并且(.....)可以是任何可能包含其他\ n字符的字符。


据我所知,scanf允许使用正则表达式,但是直到此模式,我才能使其读取字符串。您能为我提供scanf格式字符串吗?


我正在尝试类似的东西:


char input[50000];

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

但这不起作用。


杨__羊羊
浏览 821回答 2
2回答

阿波罗的战车

scanf&nbsp;据我所知允许正则表达式不幸的是,它不允许使用正则表达式:语法误导性很强,但是在实现中甚至没有与regex相似的东西scanf。所有这些都支持正则表达式的字符类,因此%[<something>]将其隐式视为[<something>]*。这就是为什么您将scanfTranslation&nbsp;调用转换为读取由以外的字符组成的字符串的原因'(', ')', 'x', and '\n'。为了解决您眼前的问题,您可以设置一个循环,逐个读取输入的字符。每次获得时'\n',请检查到目前为止,您输入的内容中至少包含三个字符,紧接其前的字符'\n'是'x',并且那之前的角色'x'是另一个'\n'如果以上所有条件均成立,则您已到达预期输入序列的末尾;否则,您的循环应继续。

白衣染霜花

scanf&nbsp;不支持正则表达式。它对字符类的支持有限,但这完全不是一回事。请勿使用scanf,fscanf或sscanf,因为:数字溢出会触发未定义的行为。仅由于有人键入太多数字,才允许C运行时使程序崩溃。某些格式说明符(尤其是%s)是不安全的,与gets不安全的方式完全相同,即它们会欣喜地写入所提供缓冲区的末尾,并使程序崩溃。它们使得很难可靠地处理格式错误的输入。在这种情况下,您不需要正则表达式;一次读取一行,getline并在行读取仅为“ x”时停止。但是,标准正则表达式库例程(不是ISO C,而是POSIX)称为regcomp和regexec。
打开App,查看更多内容
随时随地看视频慕课网APP