我有一个假设的路径,我想要一个简单的PCRE正则表达式。为了简单起见,我们假设它有三级深度,每个文件夹的名称分别是 A、B 和 C。
以下各项应与表达式匹配:
A
AB
ABC
以下项不应与表达式匹配:
AC
ACB
B
BA
BAC
BC
BCA
C
CA
CAB
CB
CBA
我能想到的唯一表达是
^**A**(**B**(**C**)?)?$
但是,理想情况下,我想要图案右侧不依赖于深度(可能远大于 3(的东西。
即^**A**1**B**1**C**$
请注意,我知道上述模式无效,但我希望它能说明我的观点。
我已经搞砸了反向引用等,但似乎无法破解它。有什么想法吗?
虽然这些
^(A|AB|ABC)$
^(A(BC?)?)$
按照所述解决您的问题(感谢CTWurs的第二个选项,它更有效(,这可能更接近您所寻求的:
^A((?<=A)B)?((?<=B)C)?$
这意味着"A,然后可选B,但仅当它跟随 A,然后可选 C 但仅当它跟随 B 时",因为它可以使用任意长值列表的简单迭代以编程方式构建。除第一学期外,每个部分都由
((?<=PREVIOUS)NEXT)?