问题描述
我想为一类字符串构造一个regular expression (in the style of lex,with a more OCaml-like syntax),其中允许 4个字符label
,[
,]
,#
仅当它们前面带有转义字符'
。
以下是一些有效的示例:
-
'
,'#Data
,abc'#Headers
,abc'#Totals'[efg
,123'#Totals']efg
,abc
以下是一些无效的示例:
-
123
,#Data
,abc#Headers
,abc#Totals[efg
,123#Totals]efg
希望定义很清楚。首先,有人知道如何构造这样的正则表达式吗?其次,有人知道如何构造ocamllex可以接受的regular expression (in the style of lex,with a more OCaml-like syntax)吗?
解决方法
除了一些示例外,您不会说被接受的字符串看起来很像。只是为了具体起见,假设允许使用小写字母和数字,并且仅在'
之前允许使用4个特殊字符。
然后,用一组36个单字符字符串和4个两个字符字符串的Kleene闭包来描述。
看起来像这样:
(['a' - 'z' '0' - '9'] | '\'' ['\'' '#' '[' ']'])*