Regex 正则表达式(lex-flex):由双条分隔的字符串
我想写一个正则表达式规则(对于lex,但一般正则表达式应该可以),如下所示:Regex 正则表达式(lex-flex):由双条分隔的字符串,regex,yacc,lex,Regex,Yacc,Lex,我想写一个正则表达式规则(对于lex,但一般正则表达式应该可以),如下所示: arbitrary-length-string || arbitrary-length-string 字符串可以包含除“| |”符号以外的所有字符。它可能包含“|” 因此,基本上需要一个正则表达式来捕获除“| |”以外的所有字符串。但是,在这一步上, 有人能告诉我如何为这样的字符串编写正则表达式吗?不包含| |的字符串可以被认为是由单个字符组成的字符串集合,然后用竖线分隔。例如,字符串 ab|cd|ef|gh |ab
arbitrary-length-string || arbitrary-length-string
字符串可以包含除“| |”符号以外的所有字符。它可能包含“|”
因此,基本上需要一个正则表达式来捕获除“| |”以外的所有字符串。但是,在这一步上,
有人能告诉我如何为这样的字符串编写正则表达式吗?不包含| |的字符串可以被认为是由单个字符组成的字符串集合,然后用竖线分隔。例如,字符串
ab|cd|ef|gh
|ab|cd|ef
等等,遵循这个模式。这些弦
- (可选)以非空字符串开头
- 然后由任意数量的竖条副本和非空字符串组成,以及
- 可以选择以竖条结束
希望这有帮助 你确定吗?因此,如果您的输入文件不包含
|
,您希望所有数据都在一个字符串中,但是如果文件包含一个|
,您希望第一个|
之前的所有内容都作为字符串,后面的所有内容,包括后续的|
,都作为第三个字符串(当然,第二个字符串是|
)?我认为这不太可能,因此您应该更好地指定上下文-可能是这样。如果没有“| |”,那么yacc将拒绝输入。如果有两个“| |”,这也是一个错误。你是对的。基本上,除了“| |”之外,我想带走所有的东西。在一般的字符串函数(C++或python等)中,这将容易得多。只要找到“| |”。就这样。但是,用RE这样做有点棘手。您可能需要“trailing context”,它的前缀是斜杠IIRC。因此,…一些正则表达式…/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
将是基本结构。在他的建议中,我标记为…一些正则表达式,这似乎是合理的。我仍然不相信这是你应该使用Flex(甚至是正则表达式)的东西,但是你没有解释这个规则可能出现的上下文。这是非常有用的评论。我正在尝试。