发布时间: 更新时间:

git

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  # 更新

问题

  1. 更新被拒绝,因为远程仓库包含您本地尚不存在的提交。
git push -u origin +master          # 强制push
  1. 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为私有仓库

  1. fork一个公开仓库
  2. 使用github导入功能,写fork仓库的地址,并创建私有仓库
  3. 本地操作
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
  1. 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)
  1. 拉取更新
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

sedstream editor的简称,也就是流编辑器。它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为"pattern space",接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。

  • 语法
sed [option] 'command' fileName
  • 选项

    • -n 使用安静silent模式。在一般sed的用法中,所有来自stdin的内容一般都会被列出到屏幕上。但如果加上-n参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来

    • -e 直接在指令列模式上进行 sed 的动作编辑

    • -f 直接将 sed 的动作写在一个文件内,-f filename则可以执行filename内的sed命令

    • -rsed命令支持扩展的正则表达式(默认是基础正则表达式)

    • -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替换掉匹配字符串

  • 替换选项

    • \digitReplacement中可含有后向引用中的\digit(digit19),引用前面定义的子表达

    • &:代表模版空间中的整个匹配部分

    • \L:将在其后的替换部分转换成小写字母,直到发现一个\U\EGNU扩展功能

    • \l:将下一个字符转换成小写字母,GNU扩展功能

    • \U:将在其后的替换部分转换成大写字母,直到发现一个\L\EGNU扩展功能

    • \u:将下一个字符转换成大写字母,GNU扩展功能

    • \E:停止由\L\U指示开始的大小写转换,GNU扩展功能

  • 标志选项

    • g:将用Replacement替换模版空间中所有匹配Regexp的部分,则不仅仅是第一个匹配部分

    • digit:只用Replacement替换模版空间中第digit(digit19)个匹配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.txtfirst开头end结尾的所有行全部打印

  • s命令

sed 's/line/text/g' test.txt 将所有行的line替换为textg代表全局选项,没有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。
-efile 检测文件(包括目录)是否存在,如果是,则返回 true。
-ffile 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 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}mn均为非负整数,其中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的向后引用。如果前面的条件都不满足,若nm均为八进制数字(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).*$
Licensed under CC BY-NC-SA 4.0
最后更新于 2022-07-25