2009-11-17 59 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中是一樣的。 外部「[...]」定義了一個字符範圍,即匹配任何一個指定的字符:反斜槓轉義內部的「[]」,以便它們只是表示字面括號。