仅当某些特殊字符前面带有转义字符时才允许使用

问题描述

我想为一类字符串构造一个regular expression (in the style of lex,with a more OCaml-like syntax),其中允许 4个字符label[]#仅当它们前面带有转义字符'

以下是一些有效的示例:

  • ''#Dataabc'#Headersabc'#Totals'[efg123'#Totals']efgabc

以下是一些无效的示例:

  • 123#Dataabc#Headersabc#Totals[efg123#Totals]efg

希望定义很清楚。首先,有人知道如何构造这样的正则表达式吗?其次,有人知道如何构造ocamllex可以接受的regular expression (in the style of lex,with a more OCaml-like syntax)吗?

解决方法

除了一些示例外,您不会说被接受的字符串看起来很像。只是为了具体起见,假设允许使用小写字母和数字,并且仅在'之前允许使用4个特殊字符。

然后,用一组36个单字符字符串和4个两个字符字符串的Kleene闭包来描述。

看起来像这样:

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