Flex正则表达式String

时间:2015-03-13 12:42:45

标签: regex string lex flex-lexer

我有一个正则表达式,匹配以"开头并以"结束的字符串,并且可以包含\"

正则表达式为\"".*[^\\]"\"

我不明白"之后和\"之后的[^\\]是什么。

当我在字符串中有\n但flex上的.规则与\n不匹配时,此正则表达式也有效。

我刚刚测试了字符串"aaaaa\naaa\naaaa"

它没有问题。

我制作了一个符合我需要的flex的正则表达式。这是\"(([^\\\"])|([\\\"]))*\"。我理解这是如何工作的。

此外,我刚刚针对""空字符串测试了我的解决方案。它不起作用。所有回答的人的答案都经过了测试,也没有起作用。

3 个答案:

答案 0 :(得分:0)

这种模式有点幼稚,甚至确实是假的。它没有处理正确的转义引号,因为它假定结束引号是第一个没有反斜杠的引号。这是一个错误的假设。

结束引号前面可以加一个文字反斜杠(用其他反斜杠转义的反斜杠,所以第二个反斜杠不再转义引号),例如:"abcde\\" (因此该字符串的内容为abcde\

这是处理所有案件的模式:

\"[^"\\]*(?s:\\.[^"\\]*)*\"

或者(我不确切知道你需要在flex模式中逃避文字引号的位置)

\"[^\"\\]*(?s:\\.[^\"\\]*)*\"

请注意,s修饰符允许点匹配非捕获组内的换行符。

答案 1 :(得分:0)

我只想出了一切:P

这个\"".*[^\\]"\"有效,因为在flex中它意味着:我希望匹配以"开头并以"结尾的内容。在这些引号中,将会有另一种匹配模式(这就是为什么存在无法解释的",因为我正在思考它们在我的问题中的存在),它可以是任何一组任何字符,但不能以{结尾{ {1}}。

让我感到困惑的是使用\,因为在flex中它意味着它将匹配除新行.之外的任何字符。所以我错误地认为它不匹配\n之类的字符串。

但实际情况是它会匹配它,因为当弹性读取时,它将首先读取"aaa\naaa"然后读取\

TRUE换行符将是这样的:

n

但是-ani C中的编译器(没有在ansi以外的其他版本上测试它)不允许你在不同的行中声明一个字符串。

我希望我的答案足够明确。欢呼声。

答案 2 :(得分:-1)

你的模式不匹配"你好"但它匹配""你好""。

如果你想匹配引号中的任何内容,可能包含\"尝试类似的事情:

/(\"[\na-zA-Z\\"]*\")/gs