仅根据前三个字符验证特定表达式所需的 Flex 表达式
Flex expression required for validating certain expression based upon the first three characters only
对于我的解析器,为了这个问题的目的,任何以一组小写字母中的单个小写字母开头,后跟字符“=”,再后跟任何其他字符的行都是有效行。因此,以下是有效行(全部从第一列开始):
a=20
b=50 70
q=20 Hello There
z=-
任何其他行均无效。我的需要是匹配补码。如何编写 flex 表达式来匹配无效行。我的困惑来自 ^ ,它意味着行的开始以及对表达式的补充。
我认为 ^[abq][=].+ 会匹配可接受的行,因此只需用 ^ 对其进行补充即可。但是表达式开头的 ^ 总是表示行首匹配。我做了一些其他尝试,但也没有用。虽然不相关,但该表达式用作丢弃无效 SDP 行的第一步。如果重要,请参阅 here 以了解相关 SDP RFC 的详细信息。
最简单的方法是始终匹配整行(或使用不同的开始条件对剩余的有效行进行词法分析)。虽然 flex 没有否定运算符([^…]
否定字符 class 不是运算符),但在这种情况下,表达式非常简单并且可以很容易地表达。请注意,各种 "invalid line" 模式是否不相交并不重要,因为哪一个匹配特定的无效行并不重要。所以这里有三种模式,我相信它们共同匹配所有无效行
[^abqz\n].* { /* Starts with the wrong letter */ }
.[^=\n] { /* Second character not = */ }
.$ { /* Only one character in line */ }
对于我的解析器,为了这个问题的目的,任何以一组小写字母中的单个小写字母开头,后跟字符“=”,再后跟任何其他字符的行都是有效行。因此,以下是有效行(全部从第一列开始):
a=20
b=50 70
q=20 Hello There
z=-
任何其他行均无效。我的需要是匹配补码。如何编写 flex 表达式来匹配无效行。我的困惑来自 ^ ,它意味着行的开始以及对表达式的补充。 我认为 ^[abq][=].+ 会匹配可接受的行,因此只需用 ^ 对其进行补充即可。但是表达式开头的 ^ 总是表示行首匹配。我做了一些其他尝试,但也没有用。虽然不相关,但该表达式用作丢弃无效 SDP 行的第一步。如果重要,请参阅 here 以了解相关 SDP RFC 的详细信息。
最简单的方法是始终匹配整行(或使用不同的开始条件对剩余的有效行进行词法分析)。虽然 flex 没有否定运算符([^…]
否定字符 class 不是运算符),但在这种情况下,表达式非常简单并且可以很容易地表达。请注意,各种 "invalid line" 模式是否不相交并不重要,因为哪一个匹配特定的无效行并不重要。所以这里有三种模式,我相信它们共同匹配所有无效行
[^abqz\n].* { /* Starts with the wrong letter */ }
.[^=\n] { /* Second character not = */ }
.$ { /* Only one character in line */ }