相关疑难解决方法(0)

PHP preg_replace

我使用NetBeans,我尝试更换\\\,但它失败了,它无法逃避的\\性格.

这不是Netbeans问题,它是一个PHP问题.

preg_replace('\','\\','text to \ be parsed');
Run Code Online (Sandbox Code Playgroud)

任何解决方案?

php regex preg-replace

3
推荐指数
1
解决办法
275
查看次数

通过在@ font-face中搜索替换,从@ font-face中提取网址

我有一个Web服务,它在css文件中重写URL,以便通过CDN提供服务.

css文件可以包含图像或字体的URL.

我目前有以下正则表达式匹配css文件中的所有URL:

(url\(\s*([\'\"]?+))((?!(https?\:|data\:|\.\.\/|\/))\S+)((\2)\s*\))
Run Code Online (Sandbox Code Playgroud)

但是,我现在想要引入对自定义字体的支持,并且需要在以下内容中定位网址@font-fontface:

@font-face {
  font-family: 'FontAwesome';
  src: url("fonts/fontawesome-webfont.eot?v=4.0.3");
  src: url("fonts/fontawesome-webfont.eot?#iefix&v=4.0.3") format("embedded-opentype"), url("fonts/fontawesome-webfont.woff?v=4.0.3") format("woff"), url("fonts/fontawesome-webfont.ttf?v=4.0.3") format("truetype"), url("fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular") format("svg");
  font-weight: normal;
  font-style: normal;
}
Run Code Online (Sandbox Code Playgroud)

然后我想出了以下内容:

@font-face\s*\{.*(url\(\s*([\'\"]?+))((?!(https?\:|data\:|\.\.\/|\/))\S+)((\2)\s*\))\s*\}
Run Code Online (Sandbox Code Playgroud)

问题是,这匹配所有内容,而不仅仅是内部的网址.我以为我可以这样使用lookbehind:

(?<=@font-face\s*\{.*)(url\(\s*([\'\"]?+))((?!(https?\:|data\:|\.\.\/|\/))\S+)((\2)\s*\))(?<=-\s*\})
Run Code Online (Sandbox Code Playgroud)

不幸的是,PCRE(PHP使用)不支持lookbehind中的变量重复,所以我被卡住了.

我不希望通过扩展名检查字体,因为某些字体的.svg扩展名可能与.svg扩展名的图像冲突.

另外,我还想修改我的原始正则表达式以匹配不在以下内容中的所有其他网址@font-face:

.someclass {
  background: url('images/someimage.png') no-repeat;
}
Run Code Online (Sandbox Code Playgroud)

由于我无法使用lookbehinds,我如何从a中的@font-face那些和不在a中的那些中提取url @font-face

css php regex

3
推荐指数
1
解决办法
767
查看次数

标签 统计

php ×2

regex ×2

css ×1

preg-replace ×1