RegEx的角色集在正后方,有可能吗


RegEx with character set inside positive lookbehind, Is it possible?

我只需要在"listing"之后匹配"name",但这些单词当然可以是任何url目录或页面。

mydomain.com/listing/name

所以我唯一能"REGuest"(请求)的就是成为那里的某个父目录。换句话说,我想匹配"位置",即域后第二位的内容。

我正在尝试类似的东西

(?<=mydomain'.com/[^/'?&]+/)[^/'?&]+(?:/)?

但是,角色集在正后方模式中不起作用,至少它被设置为只匹配一个角色。一旦我尝试匹配一个以外的(例如用+、?或*修改它),它就会停止工作。

我显然错过了积极的后备语法,而且它似乎不是为我所尝试的。

如何匹配二级文件名?

谢谢。

Regular-expressions.info指出

坏消息是,大多数regex风格不允许只使用查找背后的任何正则表达式,因为它们不能应用正则表达式反向表达。因此,正则表达式引擎需要能够在检查之前计算出要后退多少步后面的人。。。

(进一步阅读,他们甚至提到了Perl、Python和Java。)

我认为量词可能是个问题。我在stackoverflow上发现了这个,并短暂地飞越了它

难道不可能只匹配整个路径,并使用一个组作为第二级文件名:吗

mydomain'.com'/[^'/'?&]+'/([^'/'?&]+)(?:'/)?

(注:我不得不逃离/进行测试…)

这样做的结果大概是:

Array
(
    [0] => mydomain.com/listing/name
    [1] => name
)

现在,因为我不知道你的问题的上下文,我只是假设你能够对结果进行后处理,并从结果中得到组1(索引1)。如果没有,我很遗憾不知道。。。