如何将一个字符作为表达式的结尾
How to put a character as end of expression
我有这个正则表达式
url\s*\((?:\'|"|)((\S*|\?)(?<!\'|\"))(?=\'\)|"\)|\))
在这些情况下它很适合我想要的:
url("../../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)
正确组合
您可以使用
url\s*\(['"]?(.*?)['"]?\)(?![^;\s])
参见regex demo。
该模式将匹配以 url(
开头的子字符串,然后可能有一个可选的单引号或双引号,然后会将零个或多个字符捕获到组 1 中,直到第一个 )
使用 ;
或 whitepsace/end 的字符串。
参见 Regulex graph:
详情
url
- url
字符串
\s*
- 0+ 个空白字符
\(
- 一个 (
字符
['"]?
- 1 或 0 个引号
(.*?)
- 第 1 组:除换行字符外的任何零个或多个字符,尽可能少
['"]?
- 1 或 0 个引号
\)
- 一个 )
字符
(?![^;\s])
- 当前位置右侧必须有 ;
、空格或字符串结尾。
虽然您已经有了答案,但 imo 更清洁(递归)方式呢:
url
(\(
(?P<url>(?:[^()]*|(?1))+)
\))
这只需要@Wiktor 表达式所需步骤的十分之一(~4000 vs 400),参见your modified demo on regex101.com。
我有这个正则表达式
url\s*\((?:\'|"|)((\S*|\?)(?<!\'|\"))(?=\'\)|"\)|\))
在这些情况下它很适合我想要的:
url("../../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)
您可以使用
url\s*\(['"]?(.*?)['"]?\)(?![^;\s])
参见regex demo。
该模式将匹配以 url(
开头的子字符串,然后可能有一个可选的单引号或双引号,然后会将零个或多个字符捕获到组 1 中,直到第一个 )
使用 ;
或 whitepsace/end 的字符串。
参见 Regulex graph:
详情
url
-url
字符串\s*
- 0+ 个空白字符\(
- 一个(
字符['"]?
- 1 或 0 个引号(.*?)
- 第 1 组:除换行字符外的任何零个或多个字符,尽可能少['"]?
- 1 或 0 个引号\)
- 一个)
字符(?![^;\s])
- 当前位置右侧必须有;
、空格或字符串结尾。
虽然您已经有了答案,但 imo 更清洁(递归)方式呢:
url
(\(
(?P<url>(?:[^()]*|(?1))+)
\))
这只需要@Wiktor 表达式所需步骤的十分之一(~4000 vs 400),参见your modified demo on regex101.com。