-
正则表达式匹配
2020-09-04 23:36:09 -
中文正则表达式匹配-正则中文匹配
2018-05-30 17:13:44原文链接:...\w匹配的仅仅是中文,数字,字母,对于国人来讲,仅匹配中文时常会用到,见下匹配中文字符的正则表达式: [\u4e00-\u9fa5]或许你也需要匹配双字节字符,中文也是双...原文链接:http://caibaojian.com/zhongwen-regexp.html
这篇文章主要讲如何使用正则匹配中文字符,中文正则表达式的匹配规则不像其他正则规则一样容易记住,下面一起看看这个中文正则表达式是怎么样的。
\w匹配的仅仅是中文,数字,字母,对于国人来讲,仅匹配中文时常会用到,见下
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
或许你也需要匹配双字节字符,中文也是双字节的字符
匹配双字节字符(包括汉字在内):[^\x00-\xff]
注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
更多常用正则表达式匹配规则:
英文字母:[a-zA-Z] 数字:[0-9]
匹配中文,英文字母和数字及_:
//code from http://caibaojian.com/zhongwen-regexp.html ^[\u4e00-\u9fa5_a-zA-Z0-9]+$
同时判断输入长度:·
[\u4e00-\u9fa5_a-zA-Z0-9_]{4,10} ^[\w\u4E00-\u9FA5\uF900-\uFA2D]*$
1、一个正则表达式,只含有汉字、数字、字母、下划线不能以下划线开头和结尾:
^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$
其中:
^ 与字符串开始的地方匹配
(?!_) 不能以_开头 (?!.*?_$) 不能以_结尾 [a-zA-Z0-9_\u4e00-\u9fa5]+ 至少一个汉字、数字、字母、下划线
$ 与字符串结束的地方匹配
放在程序里前面加@,否则需要\\进行转义 @"^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$" (或者:@"^(?!_)\w*(?<!_)$" 或者 @" ^[\u4E00-\u9FA50-9a-zA-Z_]+$ " )
2、只含有汉字、数字、字母、下划线,下划线位置不限:
^[a-zA-Z0-9_\u4e00-\u9fa5]+$
3、由数字、26个英文字母或者下划线组成的字符串
^\w+$
4、2~4个汉字
@"^[\u4E00-\u9FA5]{2,4}$";
5、
^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
用:(Abc)+ 来分析: XYZAbcAbcAbcXYZAbcAb
来源:前端开发博客 -
正则表达式匹配规则
2021-01-15 21:42:49正则表达式匹配规则限定符:?(0或1次)限定符:* (0或1次或多次)限定符:+ (1次或多次)限定符:{ } (指定次数)使用 () 实现多个字符的匹配或运算符:|[ ] 定义匹配的字符范围元字符 \d \D \w \W \s \S . \b^...正则表达式匹配规则
注:本博客使用到的正则表达式在线测试工具:https://regex101.com/
? 表示其前面的一个字符出现的次数可以为0次或1次(可有可无)
测试示例:oo?
* 表示其前面的一个字符出现的次数可以为0次或1次或多次
测试示例:om*o
+ 表示其前面的一个字符出现的次数可以为1次或多次
测试示例: om+o
可以使用 { } 来指定前一个字符出现的次数范围
{2}表示出现次数为2次
{2,4}表示出现的次数为2–4次
{2,}表示出现的次数为2次或2次以上
测试示例: om{2}o
测试示例: om{2,4}o
测试示例: om{2,}o
[abc]+ 表示匹配字符abc
[0-5] 表示匹配数字0–5
[K-X] 表示匹配大写字母K–X
[d-t] 表示匹配小写字母d–t
使用 ^ 反向匹配
\d 代表数字字符,相当于 [0-9]
\D 代表非数字字符,相当于 [^0-9]
\w 代表单词字符(数字、字母、下划线)
\W 代表非单词字符
\s 代表空白符(空格、Tab、换行符)\S 代表非空白字符
. 代表除换行符之外的所有字符
\b 代表单词字符的边界(开头或结尾),它只代表位置,不匹配空格、换行和Tab
^ 匹配行首
$ 匹配行尾
示例1:
贪婪匹配:尽可能匹配多的字符
懒惰匹配:尽可能匹配少的字符
示例2:贪婪模式:
懒惰模式:
实例1:匹配所有16进制的RGB颜色值:
实例2:IPv4 地址匹配:
\b((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b
-
nginx入门必备收藏:nginx 正则表达式匹配详解
2013-06-20 16:38:371、正则表达式匹配 ~ 区分大小写匹配 ~* 不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 ^ 以什么开头的匹配 $ 以什么结尾的匹配 转义字符。可以转. * ?等 * 代表任意字符 2、文件及目录匹配 ...免费视频福利推荐:
2T学习视频教程+电子书 免费送:BAT面试精讲视频,亿级流量秒杀系统,分布式系统架构,中间件消息队列,Python Go入门到精通,Java实战项目,Linux, 网络,MySQL高性能,Redis集群架构,大数据,架构师速成,微服务,容器化Docker K8s, ELK Stack日志系统等免费视频教程!
1、nginx配置基础
1、正则表达式匹配
~ 区分大小写匹配
~* 不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
^ 以什么开头的匹配
$ 以什么结尾的匹配
转义字符。可以转. * ?等
* 代表任意字符
2、文件及目录匹配
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
例:
location = /
#匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配
location ^~ /images/ {
# 匹配任何已/images/开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
location ~* .(gif|jpg|jpeg)$ {
# 匹配任何已.gif、.jpg 或 .jpeg 结尾的请求
入门
1、if指令
所有的Nginx内置变量都可以通过if指令和正则表达式来进行匹配,并且根据匹配结果进行一些操作,如下:代码如下 复制代码 if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
if ($http_cookie ~* "id=([^;] +)(?:;|$)" ) {
set $id $1;
}使用符号~*和~模式匹配的正则表达式:
1.~为区分大小写的匹配。
2.~*不区分大小写的匹配(匹配firefox的正则同时匹配FireFox)。
3.!~和!~*意为“不匹配的”。
Nginx在很多模块中都有内置的变量,常用的内置变量在HTTP核心模块中,这些变量都可以使用正则表达式进行匹配。2、可以通过正则表达式匹配的指令
location
查看维基:location
可能这个指令是我们平时使用正则匹配用的最多的指令:代码如下 复制代码 location ~ .*.php?$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwsite/test.com/$fastcgi_script_name;
include fcgi.conf;
}几乎每个基于LEMP的主机都会有如上一段代码。他的匹配规则类似于if指令,不过他多了三个标识符,^~、=、@。并
且它没有取反运算符!,这三个标识符的作用分别是:
1.^~ 标识符后面跟一个字符串。Nginx将在这个字符串匹配后停止进行正则表达式的匹配(location指令中正则表达
式的匹配的结果优先使用),如:location ^~ /images/,你希望对/images/这个目录进行一些特别的操作,如增加
expires头,防盗链等,但是你又想把除了这个目录的图片外的所有图片只进行增加expires头的操作,这个操作可能
会用到另外一个location,例如:location ~* .(gif|jpg|jpeg)$,这样,如果有请求/images/1.jpg,nginx如何决
定去进行哪个location中的操作呢?结果取决于标识符^~,如果你这样写:location /images/,这样nginx会将1.jpg
匹配到location ~* .(gif|jpg|jpeg)$这个location中,这并不是你需要的结果,而增加了^~这个标识符后,它在匹
配了/images/这个字符串后就停止搜索其它带正则的location。
2.= 表示精确的查找地址,如location = /它只会匹配uri为/的请求,如果请求为/index.html,将查找另外的location,而不会匹配这个,当然可以写两个location,location = /和location /,这样/index.html将匹配到后者
,如果你的站点对/的请求量较大,可以使用这个方法来加快请求的响应速度。
3.@ 表示为一个location进行命名,即自定义一个location,这个location不能被外界所访问,只能用于Nginx产生的子请求,主要为error_page和try_files。
注意,这3个标识符后面不能跟正则表达式,虽然配置文件检查会通过,而且没有任何警告,但是他们并不会进行匹配。
综上所述,location指令对于后面值的匹配顺序为:1.标识符“=”的location会最先进行匹配,如果请求uri匹配这个location,将对请求使用这个location的配置。
2.进行字符串匹配,如果匹配到的location有^~这个标识符,匹配停止返回这个location的配置。
3.按照配置文件中定义的顺序进行正则表达式匹配。最早匹配的location将返回里面的配置。
4.如果正则表达式能够匹配到请求的uri,将使用这个正则对应的location,如果没有,则使用第二条匹配的结果。
server_name
查看维基:server_name
server_name用于配置基于域名或IP的虚拟主机,这个指令也是可以使用正则表达式的,但是注意,这个指令中的正则表达式不用带任何的标识符,但是必须以~开头:
代码如下 复制代码 server {
server_name www.example.com ~^wwwd+.example.com$;
}server_name指令中的正则表达式可以使用引用,高级的应用可以查看这篇文章:在server_name中使用正则表达式
fastcgi_split_path_info
查看维基:fastcgi_split_path_info
这个指令按照CGI标准来设置SCRIPT_FILENAME (SCRIPT_NAME)和PATH_INFO变量,它是一个被分割成两部分(两个引用)的正则表达式。如下:
代码如下 复制代码 location ~ ^.+.php {
(...)
fastcgi_split_path_info ^(.+.php)(.*)$;
fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
(...)
}第一个引用(.+.php)加上/path/to/php将作为SCRIPT_FILENAME,第二个引用(.*)为PATH_INFO,例如请求的完整
URI为show.php/article/0001,则上例中SCRIPT_FILENAME的值为/path/to/php/show.php,PATH_INFO则
为/article/0001。
这个指令通常用于一些通过PATH_INFO美化URI的框架(例如CodeIgniter)。gzip_disable
查看维基:gzip_disable
通过正则表达式来指定在哪些浏览器中禁用gzip压缩。
gzip_disable "msie6";rewrite
查看维基:rewrite
这个指令应该也是用的比较多的,它需要使用完整的包含引用的正则表达式:代码如下 复制代码 rewrite "/photos/([0-9] {2})([0-9] {2})([0-9] {2})" /path/to/photos/$1/$1$2/$1$2$3.png;通常环境下我们
会把它和if结合来使用:
代码如下 复制代码 if ($host ~* www.(.*)) {
set $host_without_www $1;
rewrite ^(.*)$ http://$host_without_www$1 permanent; # $1为'/foo',而不是'www.mydomain.com/foo'
}Nginx中的正则如何匹配中文
首先确定在编译pcre时加了enable-utf8参数,如果没有,请重新编译pcre,然后就可以在Nginx的配置文件中使用这样的正则:”(*UTF8)^/[x{4e00}-x{9fbf}]+)$”注意引号和前面的(*UTF8),(*UTF8)将告诉这个正则切换为UTF8模
式。
代码如下 复制代码 [root@backup conf]# pcretest
PCRE version 8.10 2010-06-25re> /^[x{4e00}-x{9fbf}]+/8
data> 测试
0: x{6d4b}x{8bd5}
data> Nginx模块参考手册中文版
No match
data> 参考手册中文版
0: x{53c2}x{8003}x{624b}x{518c}x{4e2d}x{6587}x{7248}location顺序错误导致下载.php源码而不执行php程序的问题
看下面的例子片断(server段、wordpress安装到多个目录):
=====================================代码如下 复制代码 location / {
try_files $uri $uri/ /index.html;
}location /user1/ {
try_files $uri $uri/ /user1/index.php?q=$uri&$args;
}location ~* ^/(user2|user3)/ {
try_files $uri $uri/ /$1/index.php?q=$uri&$args;
}location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}=====================================
nginx.conf的配置代码看上去没有任何问题,而事实上:
访问 /user1/会正常执行php程序。
访问 /user2/ 或 /user3/ 都不会执行程序,而是直接下载程序的源代码。原因在哪里?看到他们地区别了吗?
/user1/是普通location写法
而/user2/ 或 /user3/ 是正则表达式匹配的location问题就出在了/user2/ 或 /user3/匹配location指令使用了正则表达式,所以必须注意代码段的先后顺序,必须把
location ~ .php$ {...}段上移、放到它的前面去。
正确的代码举例:
=====================================代码如下 复制代码 location / {
try_files $uri $uri/ /index.html;
}location /user1/ {
try_files $uri $uri/ /user1/index.php?q=$uri&$args;
}location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}location ~* ^/(user2|user3)/ {
try_files $uri $uri/ /$1/index.php?q=$uri&$args;
}=====================================
【注意】对于普通location指令行,是没有任何顺序的要求的。如果你也遇到了类似的问题,可以尝试调整使用正则
表达式的location指令片断的顺序来调试
-
正则表达式匹配提取省市区
2018-03-01 18:18:39本文主要介绍通过正则表达式匹配提取省市区,有完整的代码示例和详细的注释。 -
正则表达式匹配任意字符
2016-08-04 14:08:02最开始以为.* 可以匹配任意字符,后来发现有问题,匹配不了换行符\n 查了下资料,用[\s\S]*匹配可以 解释:\s空白符,\S非空白符,所以[\s\S]是任意字符 -
Java实现 LeetCode 10 正则表达式匹配
2020-02-12 10:32:3810. 正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ‘*’ 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s... -
正则表达式匹配后删除
2019-08-07 09:53:31使用正则表达式匹配后,删除该匹配。 工具 https://regex101.com/ 解决方法 使用正则表达式的替换即可。 演示 删除下面字符中,每行小括号之后的内容 aiowen(lowegoinq awenow(aohwg hneg(fwone sejognw(owihga ... -
正则表达式匹配换行符
2019-01-31 14:44:58正则表达式匹配换行符 -
正则表达式匹配多行文本
2019-05-02 00:52:00今天做爬虫项目要用正则表达式匹配,以前没学过正则表达式,发现正则表达式功能真的是很强大。简单的都容易匹配,但是如何匹配多行文本?我首先想到的是用\s*匹配空字符(回车、换行、水平制表符等),然后用.*匹配... -
正则表达式匹配固定个字符
2018-11-20 22:56:00正则表达式匹配固定个字符 查找了很多都没有找到答案,最后在知乎上找到了。 问题:怎么使用匹配正则表达式匹配两个相同的字母,而不要匹配三个相同的字母? 比如使用正则表达式匹配“aa”,出现baab时可以匹配其中... -
正则表达式匹配固定汉字
2020-04-22 21:02:00正则表达式匹配固定汉字 场景 收到String类型数据,需要进行匹配是否包含固定的字符(英文、汉字),如果有则输出固定字符位置之前的数据,如果没有。则输出无 思路 使用正则表达式进行匹配,并使用group方法进行... -
正则表达式 匹配日期和时间
2018-09-10 14:17:141、正则表达式匹配字符串,注意位数 -
【计算机笔记】Java 正则表达式匹配
2019-12-16 21:41:5319. 正则表达式匹配 题目描述 请实现一个函数用来匹配包括 ‘.’ 和 ‘*’ 的正则表达式。模式中的字符 ‘.’ 表示任意一个字符,而 ‘*’ 表示它前面的字符可以出现任意次(包含 0 次)。 在本题中,匹配是指字符串... -
Django2.0 正则表达式匹配的简单例子
2019-03-12 11:56:13在Django中,使用正则表达式,匹配Url ...如果需要使用正则表达式匹配Url,先需要引入djangoUrl包 from django.conf.urls import url 然后再将需要使用正则匹配的URL改下成如下格式 url(r'... -
使用正则表达式匹配手机号
2019-04-06 11:08:29使用正则表达式匹配手机号 文献种类:专题技术文献; 开发工具与关键技术: VS 作者:卢媛媛 ; 撰写时间:2019 年 3月 29 日 正则表达式,又称规则表达式,许多程序设计语言都支持利用正则表达式进行字符串操作... -
oracle正则表达式匹配中文
2017-10-12 10:55:22oracle正则表达式regexp_...所以,我们需要用另一种方式来实现oracle正则表达式匹配中文。 我们需要用到oracle的内置函数UNISTR(str): ASCIISTR语法:asciistr(str) 功能:返回字符串的规则表现形式,英文和数字变 -
正则表达式匹配字符串
2017-12-01 04:22:45正则表达式匹配字符串数字 字母 字符 长度为1-8,可以纯字母纯数字纯符号,首尾不能有空格,中间可以有空格, 空格算长度 -
正则表达式匹配大括号里面的内容
2017-09-12 13:59:20正则表达式匹配大括号里面的内容 -
用正则表达式匹配邮箱
2018-03-31 12:06:56下面讲解在jsp中用正则表达式匹配邮箱的基本方法: 首相给出表达式: var regex = /^(?:\w+\.?)\w+@(?:\w+\.)+\w+$/; 下面逐步讲解其含义: /^ $/ 分别表示正则表达式的开始和结束 标识 ( ?:\w 括号表示... -
正则表达式匹配 年龄
2018-01-24 17:11:45通过正则表达式匹配年龄:0-159 ^((1[0-5])|[1-9])?\d$ -
mysql正则表达式匹配单个数字
2018-11-14 17:46:50匹配以单个数字开头的ip ...主要思路是结合字符串处理和正则表达式,但是正则表达式匹配不了单个数字开头的。 所以类似[0-9]{1}.这种是匹配不了单个数字的。 \b{0}这种正规的正则表达式,在mysql中并不适用。 ... -
正则表达式匹配中文
2018-03-02 15:18:16在实际开发中,偶尔需要用到正则表达式匹配中文JavaScript用正则来匹配中文时:百度百科中直接查询“正则表达式”, 可以看到“元字符”的列表,里面有说明\u的用法。(其中\un,匹配n,其中n是一个四个十六进制数字... -
JavaScript 正则表达式匹配汉字
2018-01-30 13:44:15在谷歌搜索「JavaScript 正则表达式匹配汉字」的时候,前几条结果全都是 /[\u4e00-\u9fa5]/。没有人怀疑这个正则表达式有什么问题,那么在 2018 年的今天,让我们站在 Chrome 64 的肩膀上,放飞一下自我。 汉文... -
正则表达式匹配字符串组合
2015-11-07 01:40:56谁有完整的正则表达式匹配字符串组合的word文档,正则表达式感觉使用的好频繁,想全部仔细的看看 -
Java 正则表达式,正则表达式匹配a标签下的链接,正则表达式基础
2020-11-21 13:05:39在一次Java程序设计课程中,在课堂上了解到了正则表达式,然后自己去百度了一番,发现正则表达式应用的范围还是比较广泛的,在Python爬虫爬取数据时候,也会用上正则表达式,所以决定花点心思去学习一下正则... -
使用java正则表达式匹配日期
2020-01-31 15:18:03求一个正则表达式匹配日期类型 日期格式为 "yyyy-MM-dd",考虑到要符合多种格式,不受0的影响例如 "2018-1-1" "2018-01-01" "2018-001-002" //前面可以添加任意个0 可以忽略平年和闰年的影响... -
正则表达式匹配多行HTML
2020-06-18 16:51:21在利用Python抓取CSDN博客时,需要利用正则表达式匹配多行HTML,HTML如下: 使用\s*匹配换行,div与class之间也需要使用通用字符 正则如下:<div.?class="title">\s*<h2>\s*<a.?href="(.*?)" ... -
标准SQL匹配和正则表达式匹配
2018-05-11 15:32:43MySQL中的模式匹配分为两种: 一种是标准SQL匹配,另一种是 正则表达式匹配标准SQL匹配,我们通常用的最多的一种方式 a:使用LIKE和NOT LIKE比较操作符(注意不能使用=或!=); b:模式默认是忽略大小写的; c:...
-
2020年-世界五百强前百(中国)
-
【布道者】Linux极速入门
-
使用 Linux 平台充当 Router 路由器
-
A movie title explorer.zip
-
Windows系统管理
-
C++ STL(十六):常用算术生成算法(accumulate、fill)
-
【硬核】一线Python程序员实战经验分享(1)
-
Codeforces Global Round 13 ABC题解
-
Galera 高可用 MySQL 集群(PXC v5.6 + Ngin
-
MySQL 性能优化(思路拓展及实操)
-
物联网基础篇:快速玩转MQTT
-
实现 MySQL 读写分离的利器 mysql-proxy
-
mysql-connector-c++-8.0.23-win32.msi
-
马士兵 mybatis学习笔记
-
东南大学历年c++复试题.zip
-
Java自学第九天 练习
-
MHA 高可用 MySQL 架构与 Altas 读写分离
-
用微服务spring cloud架构打造物联网云平台
-
DHCP 动态主机配置服务(在Linux环境下,配置单网段或跨网段提)
-
PS2手柄源码.zip