需要多个相似字符串的正则表达式

本文关键字:字符串 正则表达式 相似 | 更新日期: 2023-09-27 17:54:23

我需要一个正则表达式来从下面3个类似的字符串中捕获相对路径/image/picture/name.jpg。我尝试了很多方法,但有一些漏洞在我的正则表达式代码,使其工作不一致。对于这个具体问题,我找不到任何完美的解决方案。如有任何帮助,不胜感激。

  • string 1: url(/image/picture/name.jpg)
  • string 2: url("/image/picture/name.jpg")
  • string 3: url('/image/picture/name.jpg')

需要多个相似字符串的正则表达式

这会将URL捕获到组1:

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

它还将捕获URL标签括号内的任何看起来像URL但又适合特定情况的内容…

这将捕获您提到的情况,尽管它有点昂贵:

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

我更愿意使用下面的代码,然后手动测试和删减引号:

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

后一个表达式的缺点是它不能正确地处理引号中的右括号')'字符,如下例所示:

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

试试这个:

url(("|")?/图片/图片/name.jpg("|")?)

如果我理解正确,并且您希望包括括号内但不包括引号的所有内容,则应该使用以下语句。它当然不接受数字等,但将返回从遇到的第一个斜杠到最后一个非斜杠或字母字符的所有内容。

Regex re = new Regex(@"/"([a - z/)) *, RegexOptions.IgnoreCase);

试试这个:

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

确切的url可以在组名为"url"

中匹配