Regex Flex正则表达式字符串

Regex Flex正则表达式字符串,regex,string,lex,flex-lexer,Regex,String,Lex,Flex Lexer,我有一个正则表达式,它匹配以“开头和以“结尾的字符串,并且可以包含\” 正则表达式如下所示:\”“.[^\\]\” 我不明白在\“之后和[^\\]之后的”是什么 当字符串中有\n但flex上的规则与\n不匹配时,此正则表达式也可以工作 例如,我刚刚测试了字符串“aaaaa\naaa\naaaa” 它与之匹配,没有问题 我为flex做了一个符合我需要的正则表达式。这是一个\”(([^\\\”)|([\\\”)*“。不过我理解它是如何工作的 另外,我刚刚针对一个空字符串测试了我的解决方案。它不起作用

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

正则表达式如下所示:
\”“.[^\\]\”

我不明白在
\“
之后和
[^\\]
之后的
是什么

当字符串中有
\n
但flex上的
规则与
\n
不匹配时,此正则表达式也可以工作

例如,我刚刚测试了字符串
“aaaaa\naaa\naaaa”

它与之匹配,没有问题

我为flex做了一个符合我需要的正则表达式。这是一个
\”(([^\\\”)|([\\\”)*“
。不过我理解它是如何工作的


另外,我刚刚针对一个空字符串测试了我的解决方案。它不起作用。而且所有回答的答案都经过测试,也不起作用。

您的模式与“hello”不匹配,但与“hello”匹配

如果要匹配引号中可能包含“的内容,请尝试以下操作:

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

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

结束引号前面可以有一个文字反斜杠(用另一个反斜杠转义的反斜杠,因此第二个反斜杠不再转义引号),例如:
“abcde\\”
(因此此字符串的内容是
abcde\

这是处理所有情况的模式:

\"[^"\\]*(?s:\\.[^"\\]*)*\"
或者(我不知道在flex模式中需要在哪里转义文字引号):


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

我刚刚算出了所有内容:p

这个
\'.[^\\]“\”
之所以有效,是因为在flex中它的意思是:我想匹配以
开头,以
结尾的内容。在这些引号中会有另一个匹配模式(这就是为什么会有未解释的
,我在我的问题中思考它们的存在),可以是任意字符集,但不能以
\
结尾

更让我困惑的是
的使用,因为在flex中它意味着它将匹配除新行
\n
之外的任何字符。所以我错误地认为它将不匹配字符串,例如
“aaa\naaa”

但实际情况是,它将与之匹配,因为当flex读取时,它将首先读取
\
,然后读取
n

真正的新线应该是这样的:

什么 喜欢 这个“

但是,例如-ANSIC中的编译器(除了ansi之外,还没有在其他版本上测试过它)不允许在不同的行中声明字符串


我希望我的答案足够清楚。干杯。

你错了。它与“你好”匹配得很好。我刚刚测试了它。不过,只要看一下,我也会说它与“你好”不匹配“。但它确实如此。这就是我问的原因。怎么可能工作呢?我在regex101.com上试过了,但没用。请用lex试试。我的问题很具体。你的新模式是错误的,原因与我在回答中解释的相同(它无法匹配结束引号前的字面反斜杠。)@CasimiritHippolyte是的,你是对的,它不起作用。虽然这不是否决我的问题和答案的理由,但你的第一个正则表达式会导致一个错误。您的第二个正则表达式与
“aaa\n\”\“\n\\aaa”
“aaa\n\”\“\n\\aaa\\”
不匹配。我建议的那个匹配这个
“aaa\n\”\“\n\\aaa”
,但不是这个
“aaa\n\”\“\n\\aaa\”
。谢谢你的回答。你可以点击勾号。这将从未回答的队列中删除该问题。@BrianTompsett没有一个答案是正确的。。也不是我的。。如果你有,请分享。谢谢你的澄清;然而,如果你的答案不是一个答案,它应该是一个真正的问题编辑!“我刚刚把一切都弄明白了”和“我希望我的答案足够清楚”这两个词意味着你对它感到满意,并且觉得它是正确的。是的:我能正确回答,现在你已经澄清了。@BrianTompsett谢谢你,你是对的,应该是编辑的。虽然当时我以为我已经弄明白了。等待您的答案:)包含正则表达式的flex程序不起作用(只是测试了一下)-您想要一个能起作用的程序吗?如果你想解释你的表达式,你可以编辑Q以包含整个flex程序吗。我想你对你所拥有的感到困惑。
\"[^\"\\]*(?s:\\.[^\"\\]*)*\"