小编F21*_*F21的帖子

通过在@ 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
查看次数

如何使用reflect检查struct字段的类型是否为interface {}?

我正在使用reflect包来确定struct字段的类型 interface{}

我想做这样的比较(在哪里treflect.Type):

if  t == reflect.TypeOf(interface{}) {

}
Run Code Online (Sandbox Code Playgroud)

问题是编译器抱怨:type interface {} is not an expression.

反正有没有检查结构域的类型是否是interface{}

reflection go

3
推荐指数
2
解决办法
9379
查看次数

创建 git 存储库的稀疏浅克隆导致错误:尝试编写非提交对象

我想在某个标签上创建一个 git 存储库的稀疏和浅层克​​隆。

这就是我目前正在做的事情:

git init avatica-tmp

cd avatica-tmp

git remote add origin https://github.com/apache/calcite-avatica/

git config core.sparsecheckout true

echo "core/src/main/protobuf/*" >> .git/info/sparse-checkout

git pull --depth=1 origin rel/avatica-1.10.0
Run Code Online (Sandbox Code Playgroud)

它工作正常,但抛出错误:

remote: Counting objects: 531, done.
remote: Compressing objects: 100% (381/381), done.
remote: Total 531 (delta 147), reused 280 (delta 51), pack-reused 0
Receiving objects: 100% (531/531), 963.03 KiB | 233.00 KiB/s, done.
Resolving deltas: 100% (147/147), done.
From https://github.com/apache/calcite-avatica
 * tag               rel/avatica-1.10.0 -> FETCH_HEAD
fatal: update_ref failed for ref 'HEAD': cannot update …
Run Code Online (Sandbox Code Playgroud)

git sparse-checkout shallow-clone

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

在构造ImagickPixel时设置alpha通道

我是使用ImageMagick的新手.我正在使用PHP的最新imagick扩展(3.1.0rc1).然而,想象力的文档似乎有点稀疏.

我想用alpha通道创建一个ImagickPixel对象.该文件指出,这些都是一些有效的颜色值传递给构造函数:"blue", "#0000ff", "rgb(0,0,255)", "cmyk(100,100,100,10)", etc.

我知道有可能使用ImagickPixel来检索alpha值getColorValue(imagick::COLOR_ALPHA);.

那么,如何在对象初始化期间通过传递给构造函数来设置带有alpha通道的rgb颜色?

php alpha imagemagick imagick

2
推荐指数
1
解决办法
3795
查看次数

为什么 time.After 与选择块中的股票代码配对时永远不会触发?

我有一个选择块,它正在收听 2 个频道、一个自动收报机和一个计时器:

package main

import (
    "fmt"
    "time"
)

func main() {

    ticker := time.NewTicker(5 * time.Second)
    for {
        select {
        case z := <-ticker.C:
            fmt.Printf("tick %d\n", z)

        case <-time.After(12 * time.Second):
            fmt.Println("12 seconds elapsed!")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我运行代码,time.After案例永远不会运行,但自动收报机工作正常。

如果我删除自动收报机,time.After则会正确触发:

package main

import (
    "fmt"
    "time"
)

func main() {

    for {
        select {
        case <-time.After(12 * time.Second):
            fmt.Println("12 seconds elapsed!")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用计时器而不是time.After

package main

import (
    "fmt"
    "time"
)

func …
Run Code Online (Sandbox Code Playgroud)

timer go ticker

2
推荐指数
1
解决办法
1389
查看次数

对齐文本输入下方的标签

我试图将表单中的标签对齐到文本输入框下方.我从这里改编了我的CSS .

它在IE 9中完美显示,但我遇到了firefox,chrome等问题.

这是IE中的样子:

IE

这就是它在firefox中的样子:

在此输入图像描述

它在chrome中看起来最糟糕,但我想首先在firefox中使用它.

主要关注点是:

  • 文本输入应位于标签上方的中心.
  • 冒号应与文本输入垂直对齐.
  • 下拉列应与文本输入垂直对齐.

这是我的标记:

<form action="" method="post">

    <label for="time">Time settings</label>

    <div class="description">
        Description goes here
    </div>

    <span><label for="time">Hour</label> <input type="text" id="time" name="time" maxlength="2" size="2"></span>
    <span>:</span>
    <span><label for="time-minute">Minute</label> <input type="text" id="time-minute" name="time-minute" maxlength="2" size="2"></span>
    <span>:</span>
    <span><label for="time-seconds">Seconds</label> <input type="text" id="time-seconds" name="time-seconds" maxlength="2" size="2"></span>

    <span>
        <select id="time-ampm" name="time-ampm">
            <option value="am">AM</option>
            <option value="pm">PM</option>
        </select>
    </span>
    </form>
Run Code Online (Sandbox Code Playgroud)

这是CSS风格:

<style>
    span{
        display: inline-block;
    }

    span input { 
        display: block; 
        position: relative; 
        top: -3em; 
        text-align: center; …
Run Code Online (Sandbox Code Playgroud)

html css textinput

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