2009-11-17 31 views
0

如果我在我的flex文件中有以下内容,它会执行什么操作?在flex中使用正则表达式[ [];]

[\\[\\];]  { return yytext[0]; } 
+0

我不知道flex,但是在大多数正则表达式引擎中,如果[is]之后的第一个字符就被认为是字符类的一部分。所以这个正则表达式可能会被重写为:[] [;] – 2009-11-17 13:49:00

+0

@Peter:在大多数情况下,'['仍然必须被转义:'[] \ [;]'(或'[] \\ [;] '在需要反斜杠的环境中逃脱)。对我来说,这看起来更令人困惑;更好的是为了逃避他们俩。 – 2009-11-17 14:13:44

+0

@Alan - 也许,我只能在这里测试.Net正则表达式和GVIM。这两个都不需要'''逃脱。我无法想象它为什么需要这样做,因为在角色类中它没有特别的意义 – 2009-11-17 14:56:00

回答

1

它匹配由字符[];之一组成的标记。 @AAT在他的解释中是正确的,尽管术语上的“人物阶级”比“人物范围”更普遍。

return yytext[0];返回匹配标记的第一个字符。由于此处的正则表达式仅匹配单个字符标记,因此它会将匹配的标记本身作为字符返回。

0

如果它发现任何以下[];它返回yytext [0]

+0

你确定?在我所知道的大多数正则表达式中,'['和']'中的字符被视为一个字符类:它只匹配它们中定义的单个字符。 – 2009-11-17 13:13:50

+0

..也许Flex以不同的方式处理它。 – 2009-11-17 13:14:26

+0

你是对的我以为它可能是deliniter – ennuikiller 2009-11-17 13:15:26

2

如果它在Perl中,它将匹配任何'[''''''或';' - 我想它在flex中是一样的。 外部“[...]”定义了一个字符范围,即匹配任何一个指定的字符:反斜杠转义内部的“[]”,以便它们只是表示字面括号。