Regex模式帮助(我差不多有了,只需要一点专业知识就可以完成)

Regex模式帮助(我差不多有了,只需要一点专业知识就可以完成),regex,.htaccess,redirect,Regex,.htaccess,Redirect,我需要匹配两个箱子 js/example_directory/example_name.js 及 (其中12345是长度未知的数字字符串,目录的深度可以无限或根本不存在) 在这两种情况下,我都需要捕获js/和.js 和如果存在?捕获?后的数字字符串 这就是我目前所拥有的 ^js/(.*).js\??(\d+)? 这是有效的,除了它还捕获 js/example_directory/example_name.js12345 我希望正则表达式忽略这一点。有什么建议吗? 谢谢大家! 测试你的模

我需要匹配两个箱子

js/example_directory/example_name.js 

(其中12345是长度未知的数字字符串,目录的深度可以无限或根本不存在)

在这两种情况下,我都需要捕获
js/
.js

如果存在
捕获
后的数字字符串

这就是我目前所拥有的

^js/(.*).js\??(\d+)?
这是有效的,除了它还捕获

js/example_directory/example_name.js12345 
我希望正则表达式忽略这一点。有什么建议吗?
谢谢大家!

测试你的模式

回答:
使用Gumbo的信息,我的最终重写规则如下

<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteBase /
 RewriteCond %{SCRIPT_FILENAME} !-d
 RewriteCond %{SCRIPT_FILENAME} !-f
 RewriteCond %{QUERY_STRING} ^\d*$
 RewriteRule ^js/(.*)\.js$ js.php?f=$1.js&v=%0 [L]
</IfModule>

重新启动发动机
重写基/
重写cond%{SCRIPT_FILENAME}-D
重写cond%{SCRIPT_FILENAME}-F
重写条件%{QUERY\u STRING}^\d*$
重写规则^js/(.*)\.js$js.php?f=$1.js&v=%0[L]

包括整个查询字符串模式,包括?在一个条件匹配中

^js/(.*).js(\?\d+)?

包括整个查询字符串模式,包括?在一个条件匹配中

^js/(.*).js(\?\d+)?
只测试URI路径,不测试查询。因此,使用如下规则已经匹配了两个URI:

RewriteRule ^js/(.*)\.js$ …
如果您现在也要测试查询,则需要使用附加的:

最后一次成功的
RewriteCond
的匹配可以用
%n
引用,因此在整个匹配
%0
的情况下,或者在这种情况下,甚至只直接
%{QUERY\u STRING}

只测试URI路径,而不测试查询。因此,使用如下规则已经匹配了两个URI:

RewriteRule ^js/(.*)\.js$ …
如果您现在也要测试查询,则需要使用附加的:


最后一个成功的
RewriteCond
的匹配可以用
%n
引用,因此在整个匹配
%0
的情况下,或者在这种情况下,甚至只是直接
%{QUERY\u STRING}

就正则表达式而言-您可以使用
(?:)
(非捕获分组)将\?(\d+)作为一个标记,例如:

^js/(.*).js(?:\?(\d+))?

您确实不需要使用
?:
(非捕获)部分,但是如果您不这样做,反向引用将被更改-1将指向文件名,2将指向
?1234
,3将是
1234

(非捕获分组),就正则表达式而言-您可以使用
(?:)
(非捕获分组)来生成\?(\d+)作为一个傻瓜,可以这样选择:

^js/(.*).js(?:\?(\d+))?

您确实不需要<使用
?:
(非捕获)部分,但如果不这样做,反向引用将被更改-1将指向文件名,2将指向
?1234
,3将是
1234

您到底使用了什么?mod_rewrite(
RewriteRule
),mod_别名(
RedirectMatch
)或者什么?你到底用什么?mod_rewrite(
RewriteRule
),mod_别名(
RedirectMatch
)或者什么?Gumbo,有没有办法使重写条件成为可选的。这样地;如果查询存在,请使用数字,如果不存在,请继续。我也不理解您对%n的评论,如果您能提供更多信息,我将不胜感激。@Mohammad:使用
^\d*$
已经允许空查询;但如果是,它需要是数字。和
%n
(其中n是0-9中的数字)用于引用整个正则表达式的匹配(
%0
)或仅引用特定组的匹配(
%n
是第n组的匹配)。Gumbo,谢谢!我已经用我使用的最后一条规则更新了这个问题。请看是否有任何需要改进的地方。再次感谢,Gumbo,有没有办法让重写条件成为可选的。这样地;如果查询存在,请使用数字,如果不存在,请继续。我也不理解您对%n的评论,如果您能提供更多信息,我将不胜感激。@Mohammad:使用
^\d*$
已经允许空查询;但如果是,它需要是数字。和
%n
(其中n是0-9中的数字)用于引用整个正则表达式的匹配(
%0
)或仅引用特定组的匹配(
%n
是第n组的匹配)。Gumbo,谢谢!我已经用我使用的最后一条规则更新了这个问题。请看是否有任何需要改进的地方。再次感谢你。