正则表达式:首次出现一个字符后获取字符串(包括它)

时间:2017-06-13 02:25:44

标签: regex .htaccess redirect

我正在尝试从我的网站获取一些旧链接,使用301重定向指令重定向到新链接。我需要完成的是删除字符串的第一部分,直到它与连字符匹配并删除它(包括连字符)

示例:

http://example.com/19731-la-preservacion-de-la-biodiversidad-es-crucial-para-frenar-la-desertificacion-en-zonas-aridas

http://example.com/633-afecta-la-crisis-alimentaria-ya-a-miles-de-personas

应输出到:

http://example.com/la-preservacion-de-la-biodiversidad-es-crucial-para-frenar-la-desertificacion-en-zonas-aridas

http://example.com/afecta-la-crisis-alimentaria-ya-a-miles-de-personas

到目前为止我已经尝试过了 RewriteRule ^[^-|-](.*)$ $1RewriteRule ^([^-]*-)(.*)$ $1但我似乎无法让它发挥作用。

谢谢!

2 个答案:

答案 0 :(得分:1)

要在第一次出现某个字符(包括它)后获取子字符串,您可以使用negated character class来匹配该字符以外的任何字符,然后您需要启动一个捕获组,将char作为其中的第一个原子,并在以下后添加.*)

^[^-]*(-.*)$

此处,^[^-]*(-.*)$匹配整个字符串,第一个-与第一组中的所有字符匹配($1中的RewriteRule替换)。

请参阅regex demo

<强>详情

  • ^ - 字符串开头
  • [^-]* - 除-以外的零个或多个字符(否定字符类)
  • (-.*) - 第1组($1):-,然后是任意0+字符
  • $ - 字符串结束。

答案 1 :(得分:0)

尝试:

(.*?\/)\d+-(.*)

替换:

$1$2

Check This