简化正则表达式,可能很容易

simplify a regex, probably easy

我试图在 nginx 上简化一个简单的正则表达式,但它不起作用,

这是我首先得到的:

rewrite ^/(.*)/q-(.*)/$   /index.php?cat=&q=  last;

rewrite ^/(.*)/$   /index.php?cat=  last;

参数q是可选的,我想写一个正则表达式,

我试过了:

rewrite ^/(.*)/(q-(.*)\/)?$   /index.php?cat=&q=   last;

这可能是个愚蠢的东西,但它不起作用,知道吗?

rewrite ^/(.)/(q-(.)/)?$ /index.php?cat=&q= last;

您需要使用如下模式:

^/([^/]*)/(q-(.*)/)?$

现在 q 参数的值在 </code> 中,而不是 <code>(因为附加的括号子模式。

模式的第一部分也需要非贪婪,因为模式的最后部分现在是可选的。默认情况下 .* 将是 greedy 并消耗整个字符串。它可以通过指定 .*? 或使用否定字符 class [^/]* 来使其成为非贪婪的(就像我所做的那样)。 * 可能应该更改为 + 除非你真的可以有空参数。

但是@ndn 有一个有效的观点,它现在可能是一个指令而不是两个,但它是简化的吗?不是真的。