当item是mid-string或end string

时间:2016-01-21 00:23:36

标签: regex

在IIS Url Rewrite(Microsoft)中使用regex

我正在尝试编写一个正则表达式,它将仅在以下任何一个中捕获companyname / company-name:

GET-参与/企业/公司名称2

GET-参与/企业/公司名称

GET-参与/公司/公司名称-5

GET-参与/企业/公司名称

所以要清楚我想捕获一个可变公司名称,可能有也可能没有尾随-[0-9]但我不想要跟踪-[0-9]

我有以下内容,但它不正确,因为它包含-2时存在

get-involved/companies/((.*)|((.*)(-[0-9])))

3 个答案:

答案 0 :(得分:0)

这个答案适用于JS或PHP,但正如@Tom Zych所注意到的,一些小规格可能与IIS Url Rewrite有所不同,我不会使用:所以它已经完成了给你检查。

那说,你可以使用以下正则表达式:

^get-involved/companies/([^-]*)-?([^-]*)?(?:-[0-9])$

然后使用以下替换:
$1$2

答案 1 :(得分:0)

这应该可以解决问题:

 String nomeDb = "Demo2";
    try {
        System.out.println("Before connect OServerAdmin");
        OServerAdmin serverAdmin = new OServerAdmin("remote:128.199.xxx.xxx/"+nomeDb).connect("admin","password");
        System.out.println("After connect");
        if(serverAdmin.existsDatabase()){  // il db esiste
            System.out.println("in if");
            //connessione a db
            OrientGraph g = new OrientGraph("remote:128.199.xxx.xxx/"+nomeDb);
            DijkstraExcl d = new DijkstraExcl(g, "Path", "distance");
            Set<String> ex =new HashSet<String>();

            //------------------------------------------------
            Vertex start = g.getVertex("#12:6");
            Vertex end = g.getVertex("#12:11");
            ex.add("#13:0");
            Direction direction = Direction.OUT;
            System.out.println(d.getPath(start,end,direction,ex));
            System.out.println(d.getPathString(start,end,direction,ex));
            System.out.println(d.getWeight(start,end,direction,ex));
            //------------------------------------------------
            //chiude db
            g.shutdown();
        }
        else{
            System.out.println("Il database '"+ nomeDb + "' non esiste");
        }
        serverAdmin.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

基本上,主要思想是在非捕获组中使用交替。第一个替代匹配任何以 - [0-9]结尾的短语,使用正向前瞻,第二个匹配任何东西,直到它到达单词边界(或者你可以使用字符串锚点结束)。

您可以使用regex101

进行测试

答案 2 :(得分:0)

您可以简单地指定连字符需要后跟字母。

get-involved/companies/([^/-]+(-[a-z][^/-]+)*)

如果您的公司名称如3com,则无法正常使用;在这种情况下,可能会更详细的要求更新您的问题。