3

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

mydomain.com/listing/name

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

我正在尝试类似的东西

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

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

我显然错过了积极的lookbehind语法,它似乎不适合我正在尝试的东西。

如何匹配第二级文件名?

谢谢。

4

1 回答 1

2

正则表达式.info指出

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

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

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

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

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

(注意:我不得不为我的测试逃避 / ......)

结果将是这样的:

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

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

于 2012-07-27T08:13:31.707 回答