-2

我有一个假设的路径,我想要一个简单的 PCRE 正则表达式。为简单起见,我们假设它有三层深度,每个文件夹的名称分别是 A、B 和 C。

以下项目应与表达式匹配:

A
AB
ABC

以下项目不应表达式匹配:

AC
ACB
B
BA
BAC
BC
BCA
C
CA
CAB
CB
CBA

我能想到的唯一表达是

^**A**(**B**(**C**)?)?$

但是,理想情况下,我想要模式右侧不依赖于深度(可能远大于 3)的东西。
IE^**A**\1**B**\1**C**$

请注意,我知道以上是无效的模式,但我希望它能说明我的观点。

我已经搞砸了反向引用等,但似乎无法破解它。有任何想法吗?

4

1 回答 1

2

虽然这些

^(A|AB|ABC)$
^(A(BC?)?)$  

按照描述解决您的问题(感谢ctwheels提供的第二个选项,它更有效),这可能更接近您所寻求的:

^A((?<=A)B)?((?<=B)C)?$

这意味着“A,然后可选 B,但仅当它遵循 A,然后可选 C,但仅当它遵循 B”,因为它可以通过对任意长的值列表使用简单迭代以编程方式构建。除第一项外,每个部分都由

((?<=PREVIOUS)NEXT)?
于 2020-01-09T19:14:13.480 回答