pretty code

2024年3月9日 星期六

正規表示法未解之謎

我有一段簡化過的文字如下,@ 代表空格字元:

@@@@module@ANDGATE@(
@@ANDGATE@gate1@(.A1(A1),@.A2(A2),@.Z(Z));
@@@@module@ORGATE@(
@@ANDGATE@gate1@(.A1(A1),@.A2(A2),@.Z(Z));
@@ORGATE@gate1@(.A1(A1),@.A2(A2),@.Z(Z));


原本打算使用下面的 Regex 來取出各 cell init instance 那行。 

^\s+[^m].*GATE

但因為 \s+ 不會抓最大數量,故 @@@@module 前面 4 個字元也會符合 ^\s+[^m],對正規表示來說前 3 個空白符合 \s+,第 4 個空白符合 [^m] (應該說 Regex 原本用 4 個空白匹配 \s+,但因為發現這樣解讀這行就不滿足了,Regex 為了要盡可能做匹配,故使用了回溯技巧)。

目前還不知道要如何使用 [^m] 這種否定語句,只能使用 ^\s+(AND|OR) 來抓出我要的,但前提是我必須知道所有 case?

一個有 600 多萬行的文字檔,用正面表列確實沒那麼好用,我的正規表示法功力還有待加強XD

沒有留言: