2011-05-03 67 views
1

我需要一个正则表达式来捕获下面3个相似字符串的相对路径/image/picture/name.jpg。我尝试了很多方法,但是我的正则表达式代码中存在一些漏洞,导致它不一致地工作。我无法找到针对此特定问题的完美解决方案。任何帮助是极大的赞赏。需要一个正则表达式来处理多个相似的字符串

  • 串1:网址(/image/picture/name.jpg)
  • 串2:URL( “/图像/图片/ name.jpg”)
  • 串3:URL('/图像/picture/name.jpg ')
+1

有没有完美的解决方案,这个使用正则表达式(不包括带有递归/反向引用/代码表达式的“正则表达式”,甚至在上下文中也有争议)。下面的一些答案“将起作用”,但请记住它只是通过提供的有限测试数据。 – 2011-05-03 20:01:06

回答

0

试试这个:

URL((“|'?)/图像/图片/ name.jpg(”|“))

+0

这会捕捉到url(“foo”)错误“)'如果使用back-reference,将会+1,尽管这还不完美。 – 2011-05-03 19:58:57

0

如果我?正确理解你,你想要一切括号但不包括以下语句应该包括在内。它当然不会接受数字等,但会从遇到的第一个斜杠返回,直到最后一个字符不是斜线或字母。 Regex re = new Regex(@“/([a-z /.])*”,RegexOptions.IgnoreCase);}}

2

这应该捕捉到URL组1:

url\(((?:"|')?)([a-z/\.]*?)\1\) 

它也将捕获任何网址标签的括号内其他看起来像一个URL,但是是好的,具体的情况...

+0

这会抓住url(“foo”)错误“)'如果使用back-reference,将会+1,尽管这仍然不完美。 – 2011-05-03 20:00:27

+0

修复它,并添加回参考:) – 2011-05-03 20:46:21

2

这会抓住你所提到的情况下,虽然它是偏贵了一点:

(?ix-:url\(\s* 
(?: 
    (?<url>[^\)'"][^\)]*[^\)\s]) | 
    (?:'(?<url>[^']*)') | 
    (?:"(?<url>[^"]*)") 
)\s* 
\)) 

相反我会使用以下命令,然后测试和手工修剪报价:

url\(\s*(?<url>[^)'"][^\)]*[^\)\s])\s*\) 

向下侧到后来的表达是,它不能正确处理所引用的右括号“)”的字符,如以下例子:

String: url('/images/logo Copy(2).jpg') 
0

尝试这种情况:

url\(['"]?(?<url>[^'")])['"]?\) 

确切的URL可以在组中匹配"url"

相关问题