我如何找到第20个正则表达式匹配组?

时间:2017-07-24 13:58:32

标签: regex .htaccess

我正在我的一个htdocs文件夹中的.htacess文件夹中进行重写。 rewriterule看起来像这样:

RewriteRule ^index/(blah)/(blah2)/(blah3)..../(blah20)

^^^上面的代码看起来很糟糕 - 不用担心。 无论如何,我之前听说$ {20}是在正则表达式中访问第20个匹配组的正确方法,但即使在regex101中我的第20个匹配组匹配blah20,每当我打印出第20个捕获组时,我只得到$ { 20}。 为什么是这样?我是否正确访问了两位数的匹配组?

编辑 - 真正的重写:

RewriteRule ^a/([\d]*)/(b/([\d]{2}:[\d]{2}:[\d]{2})/?)?(c/(\w*)/?)?(d/([\w]
{6})/?)?(e/([\w]{6})/?)?(f/([\w]{6})/?)?(g/([\w]{6})/?)?(h/([\w]{6})/?)?
(i/([\w]{6})/?)?(j/([\w]{6})/?)?(k/([\w]{6})/?)?(l/([\w]{6})/?)?(m/([\w]
{6})/?)? /index.php?a=$1&b=$3&c=$5&d=$7&e=$9&f=${11}&g=${13}&h=${15}&i=${17}&
j=${19}&k=${21}&l=${23}&m=${25} [L]

2 个答案:

答案 0 :(得分:0)

例如this

module.exports = {
  getConnections: function () {
    var obj = xlsx.parse('xxxxx.xls'); // parses a file
    var connection = {
      customer: "",
      Type: "",
      ip: "",
      user: "",
      pass: ""

    }
    var connections = [];
    //loop through all rows in the sheet
    for (var j = 0; j < obj[0]['data'].length; j ++) {
      //add the row to the rows array
      //rows.push(sheet['data'][j]);
      if (obj[0]['data'][j].length > 4) {
        var a = connection;
        connection.customer = obj[0]['data'][j][0];
        connection.Type = obj[0]['data'][j][2]
        connection.ip = obj[0]['data'][j][3]
        connection.user = j;
        connections.push(connection)
        //console.log(connection)
      }
    }
    console.log(connections)
    return connections;
  }
}

将匹配网址中的第6个文件夹。

答案 1 :(得分:0)

您不能使用大于9 as per official mod_rewrite documentation的反向引用号。

来自手册:

  

RewriteRule反向引用:这些是$N (0 <= N <= 9)形式的反向引用。 $1$9可以从RewriteRule访问模式的分组部分(括号中),RewriteRule受当前RewriteCond条件集的约束。 $0提供对该模式匹配的整个字符串的访问权限。

如果你正在处理这么多的反向引用,那么最好将index/之后的完整URI传递给index.php并在php代码中使用explode:

RewriteRule ^index/(.+)$ index.php?q=$1 [L,QSA,NC]