git
git命令
submodule
git submodule add [[email protected]:xxx/submodule.git] [directory] # 添加子模块
git clone [[email protected]:xxx/submodule.git] [directory] --recurse-submodules # 克隆一个存储库,并自动更新仓库中所有子模块(更新可能不兼容,慎用)
git submodule update # 更新
问题
- 更新被拒绝,因为远程仓库包含您本地尚不存在的提交。
git push -u origin +master # 强制push
- gitmodules错误
删掉.git和.gitmodules重新初始化更容易。
push脚本
#!/bin/bash
echo -e "\033[0;32mDeploying updates to GitHub...\033[0m"
# Add changes to git.
git add .
# Commit changes.
msg="rebuilding site `date`"
if [ $# -eq 1 ]
then msg="$1"
fi
git commit -m "$msg"
# Push source and build repos.
git push origin master
公开仓库fork为私有仓库
- fork一个公开仓库
- 使用github导入功能,写fork仓库的地址,并创建私有仓库
- 本地操作
git clone [email protected]:<your_username>/<your_repo>.git # 克隆到本地
git remote add upstream [email protected]:<original_owner>/<original_repo>.git # 添加上游(源)仓库用于更新
git remote set-url --push upstream DISABLE # 禁用推送到上游(源)仓库
如果上游(源)仓库有更新
git fetch upstream # 获取主分支的最新修改到本地
git merge upstream/master # 将upstream分支修改内容合并到本地master
git remote -v
可以看到:
origin [email protected]:<your_username>/<your_repo>.git (fetch)
origin [email protected]:<your_username>/<your_repo>.git (push)
upstream [email protected]:<original_owner>/<original_repo>.git (fetch)
upstream DISABLE (push)
- 拉取更新
git fetch upstream
git merge upstream/master
Linux
文件
i 键可以对文件进行修改, Esc + :+ wq
退出并保存修改之后的文件
sudo gedit ~/File //编辑
touch File //新建文件
mkdir -p Folder/a/src //新建文件夹
sudo rm -r Folder //删除文件夹
安装包
- apt
sudo apt update && apt upgrade //更新
dpkg --list //显示所有软件
sudo apt-get install 包名 //安装
sudo apt-get remove 包名 //卸载不删除配置文件
sudo apt-get --purge remove 包名 //软件及其配置文件一并删除
- snap
sudo snap list //列出已经安装的snap包
sudo snap install <snap name> //安装一个snap包
sudo snap refresh <snap name> //更新一个snap包,如果后面不加包的名字更新所有的snap包
sudo snap remove <snap name> //删除一个snap包
端口
sudo apt-get install lsof //安装lsof
lsof -i:80 //查看80端口
kill -9 pid //强制杀进程
命令
local #用于声明局部变量
source
systemctl stop service # 停止一个服务
systemctl daemon-reload # 重载所有修改过的配置文件
systemctl enable #将服务设置为每次开机启动
set -eux #用于脚本开头设置
#-e 若指令传回值不等于0,则立即退出shell。0表示没有错误
#-u 当执行时使用到未定义过的变量,则显示错误信息。
#-x 执行指令后,会先显示该指令及所下的参数。
grep 、sed、awk
grep 、sed、awk被称为linux中的"三剑客"。
- grep 更适合单纯的查找或匹配文本
- sed 更适合编辑匹配到的文本
- awk 更适合格式化文本,对文本进行较复杂格式处理
sed
是stream editor
的简称,也就是流编辑器。它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为"pattern space"
,接着用sed
命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。
- 语法
sed [option] 'command' fileName
选项
-n
使用安静silent
模式。在一般sed
的用法中,所有来自stdin
的内容一般都会被列出到屏幕上。但如果加上-n
参数后,则只有经过sed
特殊处理的那一行(或者动作)才会被列出来-e
直接在指令列模式上进行sed
的动作编辑-f
直接将sed
的动作写在一个文件内,-f filename
则可以执行filename
内的sed
命令-r
让sed
命令支持扩展的正则表达式(默认是基础正则表达式)-i
直接修改读取的文件内容,而不是由屏幕输出
命令
a\
:追加行,a\
的后面跟上字符串s
(多行字符串可以用\n
分隔),则会在当前选择的行的后面都加上字符串s
c\
:替换行,c\
后面跟上字符串s
(多行字符串可以用\n
分隔),则会将当前选中的行替换成字符串s
i\
:插入行,i\
后面跟上字符串s
(多行字符串可以用\n
分隔),则会在当前选中的行的前面都插入字符串s
d
:删除行delete
,该命令会将当前选中的行删除p
:打印print
,该命令会打印当前选择的行到屏幕上y
:替换字符,通常y
命令的用法是这样的:y/Source-chars/Dest-chars/
,分割字符/
可以用任意单字符代替,用Dest-chars
中对应位置的字符替换掉Soutce-chars
中对应位置的字符s
:替换字符串,通常s
命令的用法是这样的:1,$s/Regexp/Replacement/Flags
,分隔字符/
可以用其他任意单字符代替,用Replacement
替换掉匹配字符串
替换选项
\digit
:Replacement
中可含有后向引用中的\digit
(digit
是1
至9
),引用前面定义的子表达&
:代表模版空间中的整个匹配部分\L
:将在其后的替换部分转换成小写字母,直到发现一个\U
或\E
,GNU
扩展功能\l
:将下一个字符转换成小写字母,GNU
扩展功能\U
:将在其后的替换部分转换成大写字母,直到发现一个\L
或\E
,GNU
扩展功能\u
:将下一个字符转换成大写字母,GNU
扩展功能\E
:停止由\L
或\U
指示开始的大小写转换,GNU
扩展功能
标志选项
g
:将用Replacement
替换模版空间中所有匹配Regexp
的部分,则不仅仅是第一个匹配部分digit
:只用Replacement
替换模版空间中第digit
(digit
是1
至9
)个匹配Regexp
的部分p
:若发生了替换操作,指示显示模版空间中新的数据w file-name
:若发生了替换操作,指示将模版空间中新的数据写入指定的文件file-name
中i
:表示进行Regexp
匹配时,是不区分大小写字母的
a
命令
sed '1,$a\add one' test.txt
从第一行到最后一行所有行后追加"add one"
字符串行
sed '/first/a\add one' test.txt
在匹配到first
行追加"add one"
字符串行
i
命令
与a
命令类似,只不过在匹配的行前面插入字符串行,不举例了。
c
命令
sed '1,$c\add one' test.txt
从第一行到最后一行所有行替换为"add one"
字符串行
sed '/first/c\add one' test.txt
将匹配到first
行替换为"add one"
字符串行
d
命令
sed '4,$d' test.txt
从第四行到最后一行全部删除
p
命令
sed -n '/^first.*end$/p' test.txt
以first
开头end
结尾的所有行全部打印
s
命令
sed 's/line/text/g' test.txt
将所有行的line
替换为text
,g
代表全局选项,没有g
只替换所有行的第一个匹配项
sed '/^first.*end$/s/line/text/g' test.txt
匹配以first
开头end
结尾的所有行,然后将line
全部替换为text
sed 's/\(.*\)line$/\1/g' test.txt
本例中的\(\)
中包裹的内容表示正则表达式的第n
部分,.*
表示任意字符串,所以此例相当于删除所有行末的line
脚本语言备忘录
shell
name="MyName" //定义变量
echo $name 或 echo ${name} //使用变量
val=`expr 2 + 2` #expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
echo "Total value : $val"
2>&1 把"标准错误输出"重定向到"标准输出"
特殊变量 | 含义 |
---|---|
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2 |
$# | 传递给脚本或函数的参数个数总和 |
$* | 传递给脚本或函数的所有参数,当被双引号 " " 包含时,所有的位置参数被看做一个字符串 |
$@ | 传递给脚本或函数的所有参数,当被双引号 " " 包含时,每个位置参数被看做独立的字符串 |
$? | 上个命令的退出状态,或函数的返回值 |
$$ | 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。 |
测试符 | 描述 |
---|---|
-eq,equal | 等于 |
-ne,not equal | 不等于 |
-gt,greater than | 大于 |
-lt,lesser than | 小于 |
-ge,greater or equal | 大于或等于 |
-le,lesser or equal | 小于或等于 |
-z | 检测字符串长度是否为 0,为 0 返回 true。 |
-e | file 检测文件(包括目录)是否存在,如果是,则返回 true。 |
-f | file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 |
待续
python
os
函数名 | 使用方法 |
---|---|
getcwd() | 返回当前工作目录 |
chdir(path) | 改变工作目录 |
listdir(path=’.') | 列举指定目录中的文件名(’.‘表示当前目录,’..‘表示上一级目录) |
mkdir(path) | 创建单层目录,如该目录已存在抛出异常 |
makedirs(path) | 递归创建多层目录,如该目录已存在抛出异常,注意:‘E:\a\b’和’E:\a\c’并不会冲突 |
remove(path) | 删除文件 |
rmdir(path) | 删除单层目录,如该目录非空则抛出异常 |
removedirs(path) | 递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常 |
rename(old, new) | 将文件old重命名为new |
system(command) | 运行系统的shell命令 |
walk(top) | 遍历top路径以下所有的子目录,返回一个三元组:(路径, [包含目录], [包含文件])【具体实现方案请看:第30讲课后作业^_^】 |
以下是支持路径操作中常用到的一些定义,支持所有平台 | |
os.curdir | 指代当前目录(’.’) |
os.pardir | 指代上一级目录(’..’) |
os.sep | 输出操作系统特定的路径分隔符(Win下为’\’,Linux下为’/’) |
os.linesep | 当前平台使用的行终止符(Win下为’\r\n’,Linux下为’\n’) |
os.name | 指代当前使用的操作系统(包括:‘posix’, ’nt’, ‘mac’, ‘os2’, ‘ce’, ‘java’) |
os.path
函数名 | 使用方法 |
---|---|
basename(path) | 去掉目录路径,单独返回文件名 |
dirname(path) | 去掉文件名,单独返回目录路径 |
join(path1[, path2[, …]]) | 将path1, path2各部分组合成一个路径名 |
split(path) | 分割文件名与路径,返回(f_path, f_name)元组。如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在 |
splitext(path) | 分离文件名与扩展名,返回(f_name, f_extension)元组 |
getsize(file) | 返回指定文件的尺寸,单位是字节 |
getatime(file) | 返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) |
getctime(file) | 返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) |
getmtime(file) | 返回指定文件最新的修改时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) |
以下为函数返回 True 或 False | |
exists(path) | 判断指定路径(目录或文件)是否存在 |
isabs(path) | 判断指定路径是否为绝对路径 |
isdir(path) | 判断指定路径是否存在且是一个目录 |
isfile(path) | 判断指定路径是否存在且是一个文件 |
islink(path) | 判断指定路径是否存在且是一个符号链接 |
ismount(path) | 判断指定路径是否存在且是一个挂载点 |
samefile(path1, paht2) | 判断path1和path2两个路径是否指向同一个文件 |
BeautifulSoup
from bs4 import BeautifulSoup
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
# 解析html_doc
soup = BeautifulSoup(html_doc, 'html.parser')
# 按照标准的缩进格式的结构输出
print(soup.prettify())
# 选择元素
soup.title # <title>The Dormouse's story</title>
# 提取节点信息
soup.title.name # u'title'
# 获取属性
soup.p.attrs # {'class': ['title'], 'name': 'Dormouse'}
soup.p.attrs['name'] # Dormouse
# 获取文本内容
soup.title.get_text()
soup.title.string # u'The Dormouse's story'
# 获取第一个P标签下的所有的子节点,children是迭代器,所以用list转换
list(soup.p.children)
list(soup.p.children)[0].text
# 获取前面和后面的兄弟节点,迭代器类型
list(soup.a.next_siblings)
list(soup.a.previous_siblings)
# 找到标签
soup.find('title') # <title>The Dormouse's story</title>
# 找到所有<a>标签的链接
for link in soup.find_all('a'):
print(link.get('href'))
# CSS选择器
html_doc = """
<div class="panel">
<div class="panel-heading">
<h4>Hello World</h4>
</div>
<div class="panel-body">
<ul class="list" id="list-1">
<li class="element">Foo</li>
<li class="element">Bar</li>
<li class="element">Jay</li>
</ul>
<ul class="list list-samll" id="list-2">
<li class="element">Foo</li>
<li class="element">Bar</li>
<li class="element">Jay</li>
</ul>
</div>
</div>
</div>
"""
print(soup.select('.panel-heading')) # 获取class为panel-heading的节点
print(soup.select('ul li')) # 获取ul下的li节点
print(soup.select('#list-2 li')) # 获取id为list-2下的li节点
print(soup.select('ul')) # 获取所有的ul节点
正则表达式
字符 | 描述 |
---|---|
\ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n ”匹配字符“n ”。“\n ”匹配一个换行符。串行“\\ ”匹配“\ ”而“\( ”则匹配“( ”。 |
^ | 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n ”或“\r ”之后的位置。 |
$ | 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n ”或“\r ”之前的位置。 |
* | 匹配前面的子表达式零次或多次。例如,zo*能匹配“z ”以及“zoo ”。*等价于{0,}。 |
+ | 匹配前面的子表达式一次或多次。例如,“zo+ ”能匹配“zo ”以及“zoo ”,但不能匹配“z ”。+等价于{1,}。 |
? | 匹配前面的子表达式零次或一次。例如,“do(es)? ”可以匹配“does ”或“does ”中的“do ”。?等价于{0,1}。 |
{n} | n是一个非负整数。匹配确定的n次。例如,“o{2} ”不能匹配“Bob ”中的“o ”,但是能匹配“food ”中的两个o。 |
{n,} | n是一个非负整数。至少匹配n次。例如,“o{2,} ”不能匹配“Bob ”中的“o ”,但能匹配“foooood ”中的所有o。“o{1,} ”等价于“o+ ”。“o{0,} ”则等价于“o* ”。 |
{n,m} | m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3} ”将匹配“fooooood ”中的前三个o。“o{0,1} ”等价于“o? ”。请注意在逗号和两个数之间不能有空格。 |
? | 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo ”,“o+? ”将匹配单个“o ”,而“o+ ”将匹配所有“o ”。 |
. | 匹配除“\ n ”之外的任何单个字符。要匹配包括“\ n ”在内的任何字符,请使用像“`(. |
(pattern) | 匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“\( ”或“\) ”。 |
(?:pattern) | 匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“`( |
(?=pattern) | 正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“`Windows(?=95 |
(?!pattern) | 正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“`Windows(?!95 |
(?<=pattern) | 反向肯定预查,与正向肯定预查类拟,只是方向相反。例如,“`(?<=95 |
(?<!pattern) | 反向否定预查,与正向否定预查类拟,只是方向相反。例如“`(?<!95 |
x|y | 匹配x或y。例如,“`z |
[xyz] | 字符集合。匹配所包含的任意一个字符。例如,“[abc] ”可以匹配“plain ”中的“a ”。 |
[^xyz] | 负值字符集合。匹配未包含的任意字符。例如,“[^abc] ”可以匹配“plain ”中的“p ”。 |
[a-z] | 字符范围。匹配指定范围内的任意字符。例如,“[a-z] ”可以匹配“a ”到“z ”范围内的任意小写字母字符。 |
[^a-z] | 负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z] ”可以匹配任何不在“a ”到“z ”范围内的任意字符。 |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b ”可以匹配“never ”中的“er ”,但不能匹配“verb ”中的“er ”。 |
\B | 匹配非单词边界。“er\B ”能匹配“verb ”中的“er ”,但不能匹配“never ”中的“er ”。 |
\cx | 匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c ”字符。 |
\d | 匹配一个数字字符。等价于[0-9]。 |
\D | 匹配一个非数字字符。等价于[^0-9]。 |
\f | 匹配一个换页符。等价于\x0c和\cL。 |
\n | 匹配一个换行符。等价于\x0a和\cJ。 |
\r | 匹配一个回车符。等价于\x0d和\cM。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。 |
\S | 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。 |
\t | 匹配一个制表符。等价于\x09和\cI。 |
\v | 匹配一个垂直制表符。等价于\x0b和\cK。 |
\w | 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_] ”。 |
\W | 匹配任何非单词字符。等价于“[^A-Za-z0-9_] ”。 |
\xn | 匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,“\x41 ”匹配“A ”。“\x041 ”则等价于“\x04&1 ”。正则表达式中可以使用ASCII编码。. |
*num* | 匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1 ”匹配两个连续的相同字符。 |
*n* | 标识一个八进制转义值或一个向后引用。如果*n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n*为一个八进制转义值。 |
*nm* | 标识一个八进制转义值或一个向后引用。如果*nm之前至少有nm个获得子表达式,则nm为向后引用。如果*nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则*nm将匹配八进制转义值nm*。 |
*nml* | 如果n为八进制数字(0-3),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。 |
\un | 匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(©)。 |
一、校验数字的表达式
1. 数字:^[0-9]*$
2. n位的数字:^\d{n}$
3. 至少n位的数字:^\d{n,}$
4. m-n位的数字:^\d{m,n}$
5. 零和非零开头的数字:^(0|[1-9][0-9]*)$
6. 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
7. 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$
8. 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
9. 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
10. 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
11. 非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
12. 非零的负整数:^\-[1-9][]0-9″*$ 或 ^-[1-9]\d*$
13. 非负整数:^\d+$ 或 ^[1-9]\d*|0$
14. 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
15. 非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
16. 非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
17. 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
18. 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
19. 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
二、校验字符的表达式
1. 汉字:^[\u4e00-\u9fa5]{0,}$
2. 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
3. 长度为3-20的所有字符:^.{3,20}$
4. 由26个英文字母组成的字符串:^[A-Za-z]+$
5. 由26个大写英文字母组成的字符串:^[A-Z]+$
6. 由26个小写英文字母组成的字符串:^[a-z]+$
7. 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
8. 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}
9. 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
10. 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
11. 可以输入含有^%&’,;=?$\”等字符:[^%&’,;=?$\x22]+
12. 禁止输入含有~的字符[^~\x22]+
其它:
.*匹配除 \n 以外的任何字符。
/[\u4E00-\u9FA5]/ 汉字
/[\uFF00-\uFFFF]/ 全角符号
/[\u0000-\u00FF]/ 半角符号
三、特殊需求表达式
1. Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
2. 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
3. InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
4. 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
5. 电话号码(“XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
6. 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
7. 身份证号(15位、18位数字):^\d{15}|\d{18}$
8. 短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
9. 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
10. 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
11. 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
12. 日期格式:^\d{4}-\d{1,2}-\d{1,2}
13. 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
14. 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
钱的输入格式:
1.有四种钱的表示形式我们可以接受:”10000.00″ 和 “10,000.00”, 和没有 “分” 的 “10000” 和 “10,000”:^[1-9][0-9]*$
2.这表示任意一个不以0开头的数字,但是,这也意味着一个字符”0″不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
3.一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
4.这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
5.必须说明的是,小数点后面至少应该有1位数,所以”10.”是不通过的,但是 “10” 和 “10.2” 是通过的:^[0-9]+(.[0-9]{2})?$
6.这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
7.这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
8.1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
备注:这就是最终结果了,别忘了+可以用*替代,如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
1. xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
2. 中文字符的正则表达式:[\u4e00-\u9fa5]
3. 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
4. 空白行的正则表达式:\n\s*\r (可以用来删除空白行)
5. HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? /> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)
6. 首尾空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
7. 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
8. 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
9. IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址时有用)
10. IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))
11. IP-v4地址:\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b (提取IP地址时有用)
12. 校验IP-v6地址:(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))
13. 子网掩码:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))
14. 校验日期:^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$(“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年。)
15. 抽取注释:<!–(.*?)–>
16. 查找CSS属性:^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1}
17. 提取页面超链接:(<a\\s*(?!.*\\brel=)[^>]*)(href=”https?:\\/\\/)((?!(?:(?:www\\.)?’.implode(‘|(?:www\\.)?’, $follow_list).’))[^” rel=”external nofollow” ]+)”((?!.*\\brel=)[^>]*)(?:[^>]*)>
18. 提取网页图片:\\< *[img][^\\\\>]*[src] *= *[\\”\\’]{0,1}([^\\”\\’\\ >]*)
19. 提取网页颜色代码:^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
20. 文件扩展名效验:^([a-zA-Z]\\:|\\\\)\\\\([^\\\\]+\\\\)*[^\\/:*?”<>|]+\\.txt(l)?$
21. 判断IE版本:^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\/[5-9]\\.0).*$