如何创建可以匹配以下内容的 RegEx:
a3bbb
aaaa3bbb
a4bbbb
aaa5bbbbb
即,
a
(一次或多次),然后是一个非负数,然后是 b
重复“那么多次”(与 a
和 b
之间的数字一样多)。这种语言正常吗?如果没有,我们可以为此构建一个CFG吗?
编辑:至于数字是否为个位数,我会说不是。 (同样正如 Daniel Centore 和 rici 指出的那样,该语言甚至不是 CF。那么自然的问题是,它是上下文敏感的还是不受限制的?)
最佳答案
就像其他答案所说的那样,如果数字是无界的,则语言既不是规则的(如果是规则的,抽引引理表示足够长的字符串, b
可以无限期地扩展而与数字无关)也不是上下文无关的(如果它是上下文无关的,抽引引理表示足够长的数字,数字和 b
可以重复,但不正确)。
但是该语言是上下文相关的,因为它可以使用以下语法生成(为了简单起见,我是为 base-3 数字做的,您可以扩展到 base 10):
(1) S -> aS | AB
(2) B -> BN | N
(3) aN -> a0 | a1b | a2bb
(4) 0N -> 00 | 01b | 02bb
(5) 1N -> 10 | 11b | 12bb
(6) 2N -> 20 | 21b | 22bb
(7) bN -> WN
(8) WN -> WX
(9) WX -> NX
(10)NX -> Nbbb
规则 (1) 是生成 a
的
规则(2)是生成数字中的每个数字
规则 (3)-(6) 是替换最左边的 N
编号和各自的编号为 b
的。
规则 (7)-(10) 是让 N
“消费”b
的左侧,并产生 3 b
的(10 b
以 10 为底)。从技术上讲 (7)-(10) 只是 bN -> Nbbb
.
例子:
生成:a102bbbbbbbbbb(base-3 中的 102 = base-10 中的 11)
秒
aB (1b)
aBN (2a)
aBNN (2a)
神经网络 (2b)
a1bNN (3b)
a1NbbbN (7)-(10)
a1NbbNbbb (7)-(10)
a1NbNbbbbbb (7)-(10)
a1NNbbbbbbbb (7)-(10)
a10Nbbbbbbbbbb (5a)
a102bbbbbbbbbb (4c)
关于regex - 正则表达式匹配一个数字后跟一个重复多次的符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34258430/