Beberapa karakter khusus diperbolehkan hanya jika diawali dengan karakter escape

Aug 18 2020

Saya ingin membangun sebuah ekspresi reguler (dalam gaya lex, dengan lebih OCaml-seperti sintaks) untuk kelas string, di mana 4 karakter [, ], #, 'hanya diperbolehkan jika mereka didahului dengan karakter escape' .

Berikut beberapa contoh yang valid:

  • '#Data, abc'#Headers, abc'#Totals'[efg, 123'#Totals']efg, abc,123

Berikut beberapa contoh yang tidak valid:

  • #Data, abc#Headers, abc#Totals[efg, 123#Totals]efg,'#Totals[efg

Semoga definisinya jelas. Pertama, apakah ada yang tahu cara membuat ekspresi reguler seperti itu? Kedua, apakah ada yang tahu bagaimana membangun ekspresi reguler seperti itu (dalam gaya lex, dengan sintaks yang lebih mirip OCaml) yang dapat diterima oleh ocamllex?

Jawaban

JeffreyScofield Aug 18 2020 at 08:01

Anda tidak mengatakan string yang diterima terlihat seperti selain dengan beberapa contoh. Hanya untuk konkret, katakanlah huruf kecil dan angka diperbolehkan, dan 4 karakter khusus diperbolehkan hanya jika diawali dengan '.

Ini, kemudian, dijelaskan oleh penutupan Kleene dari satu set 36 string satu karakter dan 4 string dua karakter.

Yang terlihat seperti ini:

 (['a' - 'z' '0' - '9'] | '\'' ['\'' '#' '[' ']'])*