2013-07-03 35 views
-1

这是我到目前为止有:正则表达式乐趣

^/fe/(?:[0-9A-Za-z]{2,30}?/?+)([$|#|\?]+?) 

/fe/$1

我需要支持:

  • 重写 “/ FE/ABC123 /#嗒嗒” 到“/fe /?ggg#blah“
  • ”/ fe/abc123#blah“重写”/ fe/abc123/blah“
  • ”/ fe/abc123 /?ggg#blah“以 “/ FE /#嗒嗒”
  • 重写 “/ FE/ABC123?GGG#嗒嗒” 到 “/ FE /?GGG#嗒嗒”
  • 重写 “/ FE/ABC123” 到 “/ FE /”
  • 将“/ fe/abc123 /”改写为“/ fe /”

当前前4个被正确捕获。 我仍然有问题的最后两个。

你可以用这个在这里玩: http://gskinner.com/RegExr/?35ess

任何帮助将不胜感激:)

+1

所以什么困难,如何接近为y我们目前的正则表达式不符合? –

+0

'([$ |#| \?] +?)'应该是'([$ |#| \?] +)?'。 '+'后面的'?'使得它非贪婪。你似乎想要的是在可选之前进行比赛。 – acdcjunior

回答

3

为什么不直接匹配一个路径元素(除斜线,哈希和问号的任何东西),然后一个可选的斜线:

Find what: ^/fe/[^/#?]+/? 
Replace with: /fe/ 

Working demo

+0

简单,做我需要的 - 非常感谢! – itkoren