简化正则表达式,可能很容易
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 有一个有效的观点,它现在可能是一个指令而不是两个,但它是简化的吗?不是真的。
我试图在 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 有一个有效的观点,它现在可能是一个指令而不是两个,但它是简化的吗?不是真的。