Regex 正则表达式(lex-flex):由双条分隔的字符串

Regex 正则表达式(lex-flex):由双条分隔的字符串,regex,yacc,lex,Regex,Yacc,Lex,我想写一个正则表达式规则(对于lex,但一般正则表达式应该可以),如下所示: arbitrary-length-string || arbitrary-length-string 字符串可以包含除“| |”符号以外的所有字符。它可能包含“|” 因此,基本上需要一个正则表达式来捕获除“| |”以外的所有字符串。但是,在这一步上, 有人能告诉我如何为这样的字符串编写正则表达式吗?不包含| |的字符串可以被认为是由单个字符组成的字符串集合,然后用竖线分隔。例如,字符串 ab|cd|ef|gh |ab

我想写一个正则表达式规则(对于lex,但一般正则表达式应该可以),如下所示:

arbitrary-length-string || arbitrary-length-string
字符串可以包含除“| |”符号以外的所有字符。它可能包含“|”

因此,基本上需要一个正则表达式来捕获除“| |”以外的所有字符串。但是,在这一步上,


有人能告诉我如何为这样的字符串编写正则表达式吗?

不包含| |的字符串可以被认为是由单个字符组成的字符串集合,然后用竖线分隔。例如,字符串

ab|cd|ef|gh
|ab|cd|ef
等等,遵循这个模式。这些弦

  • (可选)以非空字符串开头
  • 然后由任意数量的竖条副本和非空字符串组成,以及
  • 可以选择以竖条结束
假设只允许使用“a”和“|”字符,则该字符的一个正则表达式为

(a+)(\\| a+*\|)

(我用\|代表|字符,因为它需要转义)。我认为你可以通过在中间用两个正则表达式连接两个副本来编写一个正则表达式。
希望这有帮助

你确定吗?因此,如果您的输入文件不包含
|
,您希望所有数据都在一个字符串中,但是如果文件包含一个
|
,您希望第一个
|
之前的所有内容都作为字符串,后面的所有内容,包括后续的
|
,都作为第三个字符串(当然,第二个字符串是
|
)?我认为这不太可能,因此您应该更好地指定上下文-可能是这样。如果没有“| |”,那么yacc将拒绝输入。如果有两个“| |”,这也是一个错误。你是对的。基本上,除了“| |”之外,我想带走所有的东西。在一般的字符串函数(C++或python等)中,这将容易得多。只要找到“| |”。就这样。但是,用RE这样做有点棘手。您可能需要“trailing context”,它的前缀是斜杠IIRC。因此,
…一些正则表达式…/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
将是基本结构。在他的建议中,我标记为
…一些正则表达式
,这似乎是合理的。我仍然不相信这是你应该使用Flex(甚至是正则表达式)的东西,但是你没有解释这个规则可能出现的上下文。这是非常有用的评论。我正在尝试。