regex - 正则表达式匹配一个数字后跟一个重复多次的符号?

标签 regex grammar

如何创建可以匹配以下内容的 RegEx:

a3bbb
aaaa3bbb
a4bbbb
aaa5bbbbb

即,a (一次或多次),然后是一个非负数,然后是 b重复“那么多次”(与 ab 之间的数字一样多)。

这种语言正常吗?如果没有,我们可以为此构建一个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/

相关文章:

regex - 我如何编写一个在每一行上执行多次替换的正则表达式,除非该行以某个字符串开头?

c# - 正则表达式忽略嵌套分隔符上的匹配

grammar - 发现不明确的 BNF

prolog - 在序言中编写语法并且无法使其正常工作

javascript - 使用 javascript 和正则表达式删除具有特定字符的行

javascript - 编辑String的原型(prototype)

regex - 带有法语字符的 NSRegularExpression

grammar - 自动计算 FIRST 和 FOLLOW 集的好工具是什么?

parsing - BNF 处理转义序列

c - 如何导出 C 表达式 "4 - 2 - 1"?