我有一个正则表达式,匹配以"
开头并以"
结束的字符串,并且可以包含\"
。
正则表达式为\"".*[^\\]"\"
。
我不明白"
之后和\"
之后的[^\\]
是什么。
当我在字符串中有\n
但flex上的.
规则与\n
不匹配时,此正则表达式也有效。
我刚刚测试了字符串"aaaaa\naaa\naaaa"
。
它没有问题。
我制作了一个符合我需要的flex的正则表达式。这是\"(([^\\\"])|([\\\"]))*\"
。我理解这是如何工作的。
此外,我刚刚针对""
空字符串测试了我的解决方案。它不起作用。所有回答的人的答案都经过了测试,也没有起作用。
答案 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