我的任务是更改.htaccess文件。不幸的是,我对正则表达式知之甚少,所以大部分文件对我来说都是不可读的。特别是,我有这两个RE ......
1:^(?!((www|web3|web4|web5|web6|cm|test)\.mydomain\.com)|(?:(?:\d+\.){3}(?:\d+))$).*$
2:^/([^/][^/])/([^/][^/])/([^/]+)/Job-Posting/$ /Misc/jobposting\.asp\?country=$1&state=$2&city=$3
对于第一个,我或多或少了解上半部分。它试图匹配不是www.mydomain.com或web3.mydomain.com等的东西,它可以匹配零或一次。我不清楚的是下半部分是做什么的。我的研究表明,?:
暗示某种旗帜,但我没有看到任何解释究竟是什么意思的例子。 请解释此部分的含义,并提供与之匹配的示例。
对于第二个,评论说这适用于包含/US/NY/Rochester/Job-Posting/
的网址。从这一点我可以推断^/
意味着一个角色,但同样,我在目前的研究中找不到。 ^/
的正式定义是什么?将其放入方括号[^/]
中的重要性是什么?
如果我能掌握这两个RE,我应该能够根据我的需要调整它们。非常感谢您的帮助。
答案 0 :(得分:1)
?:特别是没有匹配任何东西,它修改了括号的行为。 ?:表示括号是非捕获的,因此不能在规则中引用。当您不需要引用捕获的文本时,非捕获的parens很好用,因为系统不必记住'文本,节省资源。
有问题的代码:
(?:(?:\d+\.){3}(?:\d+))
匹配一个或多个数字,后跟周期乘以3,然后是一个或多个数字。这将匹配IP地址(例如127.0.0.1)。这也将匹配123456.1.1.3456789,因此您可能希望限制允许的字符数(?:(?:\ d {1,3}。){3}(?:\ d {1,3})),我以为我还没有对此进行过测试,所以请耐心等待。
Info on non capturing groupings.
第二项围绕使用方括号作为字符集。方括号匹配其中记录的任何内容,^否定匹配。因此[ad02]将匹配四个字符a,d,0或2中的任何一个,而[^ ad02]将匹配不是 a,d,0或2的任何字符。所以,^ /表示不是/.
的任何字符方括号的一个棘手问题是它们匹配的项目数量。 [^ /]将匹配一个字符,但[ad02]也是如此。在集合中有多少个字符并不重要,它仍然遵循括号中的修饰符。因此[^ /] {3}将匹配任何不包含正斜杠的3个字符系列,而[^ /] {2}将匹配具有相同限制的2个字符的字符串。
有关字符集的更多信息,请参阅Character Classes or Character Sets