首页 > 解决方案 > 如何将字符作为表达式的结尾

问题描述

我有这个正则表达式

url\s*\((?:\'|"|)((\S*|\?)(?<!\'|\"))(?=\'\)|"\)|\))

在这些情况下,它非常适合我想要的:

网址(“ ../../Common/common/fonts/lato/lato-black-webfont.svg?#lato_blackregular ”)

但是当我遇到这样的情况时,它不会按我想要的方式工作

lato_blackregular;src:url(" ../../Common/common/fonts/lato/lato-black- webfont.eot ");src:url("../../Common/common/fonts/lato/ lato-black-webfont.eot?#iefix ")

我如何定义“;” 例如换行符,只要你有一个“;” 它为组合而重新开始?

演示正在发生的事情: https ://regex101.com/r/2YHl2C/1/

使用\S*?不起作用,因为它停止与background:url(/uploads/2019/03/0002-image(thumbnail_product).jpg)

标签: phpregexpreg-match

解决方案


您可以使用

url\s*\(['"]?(.*?)['"]?\)(?![^;\s])

请参阅正则表达式演示

该模式将匹配以 开头的子字符串url(,然后可能有一个可选的单引号或双引号,然后将捕获到第 1 组零个或多个字符,直到第一个)后跟;或字符串的空白/结尾。

请参阅Reglex 图

在此处输入图像描述

细节

  • url- 一个url字符串
  • \s*- 0+ 空白字符
  • \(- 一个(字符
  • ['"]?- 1 或 0 个引号
  • (.*?)- 第 1 组:除换行符之外的任何零个或多个字符,尽可能少
  • ['"]?- 1 或 0 个引号
  • \)- 一个)字符
  • (?![^;\s])- 在当前位置的右侧必须有;, 空格或字符串结尾。

推荐阅读