正则表达式:如果匹配一个模式,如何停止匹配网址

时间:2012-04-02 19:20:44

标签: regex mod-rewrite

我正在编写一个url rewrite regex来查找每个斜线对之间有破折号的字符串,例如,

/aaa-bb/cc/dd-ee-ff/gg

应与aaa-bbdd-ee-ff匹配。如果网址包含/test/,我需要它匹配任何内容,因此对于网址/aaa-bb/cc/test/dd-ee-ff/gg,它应该不匹配。我写了一个正则表达式

/\w+-(\w+(?!\.)-?)+

它会发现所有字符串都包含-,但我无法添加/test/部分的模式。

2 个答案:

答案 0 :(得分:1)

据我所知,正则表达式无法维持一个状态,因此你应该将你正在做的事情分成两个单独的检查,在测试检查中嵌套破折号检查。

if(!hasTest) {
  //check for dashes
}

答案 1 :(得分:1)

紧接在包含正则表达式的RewriteRule之前,添加重写条件以排除其中包含子字符串/test/的网址。 RewriteCond看起来像:

RewriteCond %{REQUEST_URI} !/test/
RewriteRule /\w+-(\w+(?!\.)-?)+ /some_place_else.html?parameters=$1