正则表达式与正向回顾内的字符集,可能吗?

ser*_*gio 5 php regex url directory-structure

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

mydomain.com/listing/name

所以我唯一可以“REGuest”(请求)的就是在那里找到一些父目录。换句话说,我想匹配“位置”,即域之后第二个出现的内容。

我正在尝试类似的东西

(?<=mydomain\.com/[^/\?&]+/)[^/\?&]+(?:/)?
Run Code Online (Sandbox Code Playgroud)

但字符集在正向后查找中不起作用,至少它设置为仅匹配一个字符。一旦我尝试匹配除一个以外的其他内容(例如用 +、? 或 * 修改它),它就会停止工作。

我显然错过了积极的后向语法,它似乎不适合我正在尝试的事情。

我怎样才能匹配二级文件名?

谢谢。

Slo*_*omo 2

Regular-expresss.info指出

坏消息是,大多数正则表达式风格不允许您在lookbehind中使用任何正则表达式,因为它们无法向后应用正则表达式。因此,正则表达式引擎需要能够计算出在检查lookbehind之前要后退多少步......

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

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

是否可以只匹配整个路径,并使用一个组作为第二级文件名:

mydomain\.com\/[^\/\?&]+\/([^\/\?&]+)(?:\/)?
Run Code Online (Sandbox Code Playgroud)

(注意:我必须在测试中转义 / ......)

结果会是这样的:

Array
(
    [0] => mydomain.com/listing/name
    [1] => name
)
Run Code Online (Sandbox Code Playgroud)

现在,因为我不知道您的问题的背景,所以我只是假设您能够对结果进行后处理并从结果中获取组 1(索引 1)。如果没有,不幸的是我不知道......