This regex base on php syntax


常用正则函数

  • preg_match //常用于表达验证
  • preg_match_all
  • preg_replace //常用于过滤非法词汇
  • preg_filter
  • preg_grep
  • preg_quote

基本语法

界定符

$pattarn = “/[0-9]/“ //两个“/ /”,”# #”, “{ }” 大括号也是运算符,避免歧义一般不用

Tips: 正则表达式工具 regexpal

原子

最小匹配单位,unicode 编码表中的字符,包括可见符号和不可以见符号

Tips: 文字匹配(中文,日文等)先转换成 unicode 编码

元字符

原子的筛选方式

  • 匹配两个或者多个分支选择
  • [ ] 匹配方括号中的任意一个原子
  • [^] 匹配除方括号中的原子之外的任意字符

原子的集合

  • . 匹配除换行符之外的任意字符
  • \d 匹配任意一个十进制数字,即[0-9]
  • \D 匹配任意一个非十进制数字,即[^0-9]
  • \s 匹配一个不可见原子,即[\f\n\r\t\v]
  • \S 匹配一个可见原子,即[^\f\n\r\t\v]
  • \w 匹配任意一个数字、字母或下划线,即[0-9a-zA-Z]
  • \W 匹配任意一个非数字、字母或下划线,即[^0-9a-zA-Z]

量词

  • {n} 表示其前面的原子恰好出现n次
  • {n,} 表示其前面的原子最少出现n次
  • {n,m} 表示其前面的原子最少出现n次,最多出现m次
  • * 匹配0次、1次或者多次其之前的原子,即{0,}
  • + 匹配1次或者多次其之前的原子,即{1,}
  • ? 匹配0次或者1次其之前的原子,即{0,1}

边界控制和模式单元

  • ^ 匹配字符串开始的位置
  • $ 匹配字符串结尾的位置
  • ( ) 匹配其中的整体位一个原子

高级应用

  • 修正模式 ‘/im.+123/U’
  • 在界定符末尾加 修正符 U,常见的修正符有一下几种:

    • U - 懒惰匹配 //匹配所有结果中长度最小的
    • i - 忽略英文字母大小写
    • x - 忽略空白 //包括空格、制表符、回车等产生的空白
    • s - 让元字符‘.’匹配包括换行符在内的所有字符

应用实例

  • 非空 .+
  • 浮点数 \d.\d{2}$ //保留两位小数的浮点数
  • 手机号 1(3 4 5 7 8){9} or 1[34578]{9}
  • email ^\w+(.\w)*@\w+(.\w)+$
  • url ^(https?://)?(\w+.)[a-zA-Z]+$

在windows和mac上以docker为基础搭建开发环境


Docker安装

  • 登录daocloud.io下载docker toolbox工具包并安装
  • 运行Docker Quickerstart Terminal快捷方式启动虚拟机。第一次启动,会自动下载最新版本的boot2docker镜像,并生成名为default的虚拟机
  • 运行命令docker-machine ssh default进入docker虚拟机

tips: 虚拟机会自动映射宿主机的个人文件目录

windows: c:\Users\feng ---> /c/Users/feng 
mac: /Users/feng ---> /Users/feng
  • sudo -i 登录root账户,安装docker-compose

      $ curl -L get.daocloud.io/docker/compose/releases/download/1.4.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
      $ chmod +x /usr/local/bin/docker-compose
    

由于docker虚拟机只会持久化容器,虚拟机内的操作如果需要保留,需要保存或生成snapshot,否则关闭虚拟机后会丢失。

  • exit 退出root账户,安装daocloud加速器(国内用户)

      $ curl -sSL https://get.daocloud.io/daomonit/install.sh | sh -s a702bb3c4b4f7bec72df4776fa2c54effb76a3f1
    

至此, docker基本运行环境搭建完毕。

搭建开发环境

下面以php的web开发环境为例,搭建docker下的开发环境

  • 在宿主机的映射的共享目录中创建Dockerfiles文件夹,保存事先准备好的dockerfile文件。至于如何配置dockerfile文件,可以参考dockerfile文件配置

      $ docker run -d -p 8086:80 nginx //左边是外部端口,右边是容器内部暴露端口
    
  • 使用docker-compose 管理多个容器

    • 在Dockerfiles文件夹中创建dockerfile.yml文件,并配置好需要被管理的容器,配置方法可以参考这里
    • 定位到Dockerfiles文件夹内,运行docker-compose up,拉取镜像;若配置无误,该命令会自动初始化,并启动镜像。
    • 也可以使用命令docker-compose build拉取,docker-compose start 在后台运行镜像。

至此,docker开发环境搭建完毕。

Here be a sample post with a custom background image. To utilize this “feature” just add the following YAML to a post’s front matter.

image:
  background: filename.png

This little bit of YAML makes the assumption that your background image asset is in the /images folder. If you place it somewhere else or are hotlinking from the web, just include the full http(s):// URL. Either way you should have a background image that is tiled.

If you want to set a background image for the entire site just add background: filename.png to your _config.yml and BOOM — background images on every page!

Background images from Subtle Patterns (Subtle Patterns) / CC BY-SA 3.0
Syntax Highlighting Post

Syntax highlighting is a feature that displays source code, in different colors and fonts according to the category of terms. This feature facilitates writing in a structured language such as a programming language or a markup language as both structures and syntax errors are visually distinct. Highlighting does not affect the meaning of the text itself; it is intended only for human readers.1

GFM Code Blocks

GitHub Flavored Markdown fenced code blocks are supported. To modify styling and highlight colors edit /_sass/syntax.scss.

#container {
  float: left;
  margin: 0 -240px 0 0;
  width: 100%;
}
.highlight {
  margin: 0;
  padding: 1em;
  font-family: $monospace;
  font-size: $type-size-7;
  line-height: 1.8;
}
<nav class="pagination" role="navigation">
  {% if page.previous %}
    <a href="{{ site.url }}{{ page.previous.url }}" class="btn" title="{{ page.previous.title }}">Previous article</a>
  {% endif %}
  {% if page.next %}
    <a href="{{ site.url }}{{ page.next.url }}" class="btn" title="{{ page.next.title }}">Next article</a>
  {% endif %}
</nav><!-- /.pagination -->
1
2
3
4
5
6
7
8
<nav class="pagination" role="navigation">
  {% if page.previous %}
    <a href="{{ site.url }}{{ page.previous.url }}" class="btn" title="{{ page.previous.title }}">Previous article</a>
  {% endif %}
  {% if page.next %}
    <a href="{{ site.url }}{{ page.next.url }}" class="btn" title="{{ page.next.title }}">Next article</a>
  {% endif %}
</nav><!-- /.pagination -->
module Jekyll
  class TagIndex < Page
    def initialize(site, base, dir, tag)
      @site = site
      @base = base
      @dir = dir
      @name = 'index.html'
      self.process(@name)
      self.read_yaml(File.join(base, '_layouts'), 'tag_index.html')
      self.data['tag'] = tag
      tag_title_prefix = site.config['tag_title_prefix'] || 'Tagged: '
      tag_title_suffix = site.config['tag_title_suffix'] || '&#8211;'
      self.data['title'] = "#{tag_title_prefix}#{tag}"
      self.data['description'] = "An archive of posts tagged #{tag}."
    end
  end
end

Code Blocks in Lists

Indentation matters. Be sure the indent of the code block aligns with the first non-space character after the list item marker (e.g., 1.). Usually this will mean indenting 3 spaces instead of 4.

  1. Do step 1.
  2. Now do this:

    def print_hi(name)
      puts "Hi, #{name}"
    end
    print_hi('Tom')
    #=> prints 'Hi, Tom' to STDOUT.
    
  3. Now you can do this.

GitHub Gist Embed

An example of a Gist embed below.

Sample Link Post

This theme supports link posts, made famous by John Gruber. To use, just add link: http://url-you-want-linked to the post’s YAML front matter and you’re done.