当前位置: 首页 > news >正文

禅城网站建设公司百度关键词seo外包

禅城网站建设公司,百度关键词seo外包,网页设计代码csdn,dw制作网页的步骤目录 元字符 连接符 限定符 定位符 修饰符(标记) 运算符优先级 普通字符集及其替换 零宽断言 正向先行断言 负向先行断言 正向后发断言 负向后发断言 捕获组 普通捕获组 命名捕获组 PS:非捕获组 正则表达式在线测试: 正则在线测试工具 …

目录

元字符

连接符

限定符

定位符

修饰符(标记)

运算符优先级

普通字符集及其替换

零宽断言

正向先行断言

负向先行断言

正向后发断言

负向后发断言

捕获组

普通捕获组

命名捕获组

PS:非捕获组



正则表达式在线测试:  正则在线测试工具

元字符

字符描述
\d

匹配一个数字字符。等价于 [0-9]。

\D

匹配一个非数字字符。等价于 [^0-9]。

\s

匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

\S

匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

\w

匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。

\W

匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'。

\n

匹配一个换行符。等价于 \x0a 和 \cJ。

\r

匹配一个回车符。等价于 \x0d 和 \cM。

\t

匹配一个制表符。等价于 \x09 和 \cI。

\f

匹配一个换页符。等价于 \x0c 和 \cL。

\

将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。

.

匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像"(.|\n)"的模式。

[ ]

字符种类。匹配方括号内的任意字符。

[^ ]

否定的字符种类。匹配除了方括号里的任意字符

连接符

字符描述
[0-9]匹配数字,等价于\d
[a-z]匹配英文小写字母
[A-Z]

匹配英文大写字母

[0-9a-zA-z]匹配数字或英文字母
[\u4e00-\u9fa5]匹配一个汉字

限定符

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。

正则表达式的限定符有:

字符描述
*匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于 {0,}。
+匹配前面的子表达式一次或多次。例如,zo+ 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
?

匹配前面的子表达式零次或一次。例如,do(es)? 可以匹配 "do""does""doxy" 中的 "do""does"。? 等价于 {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?。请注意在逗号和两个数之间不能有空格。

定位符

定位符使您能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。

定位符用来描述字符串或单词的边界,^ 和 $ 分别指字符串的开始与结束,\b 描述单词的前或后边界,\B 表示非单词边界。

正则表达式的定位符有:

字符描述
^匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。
$匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。
\b匹配一个单词边界,即字与空格间的位置。
\B非单词边界匹配。

注意:不能将限定符与定位符一起使用。由于在紧靠换行或者单词边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。

若要匹配一行文本开始处的文本,请在正则表达式的开始使用 ^ 字符。不要将 ^ 的这种用法与中括号表达式内的用法混淆。

修饰符(标记)

标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。

标记不写在正则表达式里,标记位于表达式之外,格式如下:

修饰符含义描述
iignore - 不区分大小写将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。
gglobal - 全局匹配查找所有的匹配项。
mmulti line - 多行匹配使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。
s特殊字符圆点 . 中包含换行符 \n默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。

运算符优先级

正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。

相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各种正则表达式运算符的优先级顺序:

运算符描述
\转义符
(), (?:), (?=), []圆括号和方括号
*, +, ?, {n}, {n,}, {n,m}限定符
^, $, \任何元字符、任何字符定位点和序列(即:位置和顺序)
|替换,"或"操作
字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。

普通字符集及其替换

符号替换正则描述
\d[0-9]匹配数字字符
\D[^0-9]匹配非数字字符
\w0-9a-zA-z]匹配数字或字母或下划线
\W[^\w]匹配非数字或字母或下划线
\s[\r\t\n\f]匹配任意的空白符,如空格,换行符,制表符等
\S[^\s]匹配任意不是空白符的字符

零宽断言

  • 所谓断言,是用来声明一个应该为真的事实。在正则表达式中,只有当断言为真时才会继续进行匹配。
  • 零宽断言:像用于查找某些内容之前或者之后的东西,其中一些特殊字符如“\b、^、$”等用于指定一个位置,这个位置应满足一定的条件。

正向先行断言

(?=pattern) 匹配 pattern 之前的位置,即:要想满足匹配,后面得跟着 pattern

负向先行断言

(?!pattern) 匹配 pattern 之前的位置,即:要想满足匹配,后面不能跟着 pattern

正向后发断言

(?<=pattern) 匹配 pattern 之后的位置,即:要想满足匹配,前面得跟着 pattern

负向后发断言

(?<!pattern) 匹配 pattern 之后的位置,即:要想满足匹配,前面不能跟着 pattern

规律 所谓”正”,即字符中需要出现 pattern ;所谓“负”,即字符中不能出现 pattern ; 所谓“先”,即匹配在 pattern 前的位置 ; 所谓“后”,即匹配在 pattern 后的位置;

捕获组

捕获组分为:

  • 普通捕获组(Expression)
  • 命名捕获组(?Expression)

普通捕获组

从正则表达式左侧开始,每出现一个左括号"("记做一个分组,分组编号从 1 开始。0 代表整个表达式。

对于时间字符串:2017-04-25,表达式如下

(\\d{4})-((\\d{2})-(\\d{2}))

有 4 个左括号,所以有 4 个分组:

编号捕获组匹配
0(\d{4})-((\d{2})-(\d{2}))2017-04-25
1(\d{4})2017
2((\d{2})-(\d{2}))04-25
3(\d{2})04
4(\d{2})25
public static final String DATE_STRING = "2017-04-25";
public static final String P_COMM = "(\\d{4})-((\\d{2})-(\\d{2}))";Pattern pattern = Pattern.compile(P_COMM);
Matcher matcher = pattern.matcher(DATE_STRING);
matcher.find();//必须要有这句System.out.printf("\nmatcher.group(0) value:%s", matcher.group(0)); 
System.out.printf("\nmatcher.group(1) value:%s", matcher.group(1)); 
System.out.printf("\nmatcher.group(2) value:%s", matcher.group(2)); 
System.out.printf("\nmatcher.group(3) value:%s", matcher.group(3)); 
System.out.printf("\nmatcher.group(4) value:%s", matcher.group(4));

命名捕获组

每个以左括号开始的捕获组,都紧跟着 ?,而后才是正则表达式。

对于时间字符串:2017-04-25,表达式如下:

(?<year>\\d{4})-(?<md>(?<month>\\d{2})-(?<date>\\d{2}))

有 4 个命名的捕获组,分别是:

编号名称捕获组匹配
00(?\d{4})-(?(?\d{2})-(?\d{2}))2017-04-25
1year(?\d{4})-2017
2md(?(?\d{2})-(?\d{2}))04-25
3month(?\d{2})04
4date(?\d{2})25

命名的捕获组同样也可以使用编号获取相应值。

public static final String P_NAMED = "(?<year>\\d{4})-(?<md>(?<month>\\d{2})-(?<date>\\d{2}))";
public static final String DATE_STRING = "2017-04-25"; 
Pattern pattern = Pattern.compile(P_NAMED);
Matcher matcher = pattern.matcher(DATE_STRING);
matcher.find();System.out.printf("\n===========使用名称获取============="); 
System.out.printf("\nmatcher.group(0) value:%s", matcher.group(0)); 
System.out.printf("\n matcher.group('year') value:%s", matcher.group("year")); 
System.out.printf("\nmatcher.group('md') value:%s", matcher.group("md")); 
System.out.printf("\nmatcher.group('month') value:%s", matcher.group("month")); 
System.out.printf("\nmatcher.group('date') value:%s", matcher.group("date"));matcher.reset();System.out.printf("\n===========使用编号获取=============");
matcher.find(); 
System.out.printf("\nmatcher.group(0) value:%s", matcher.group(0)); 
System.out.printf("\nmatcher.group(1) value:%s", matcher.group(1)); 
System.out.printf("\nmatcher.group(2) value:%s", matcher.group(2)); 
System.out.printf("\nmatcher.group(3) value:%s", matcher.group(3)); 
System.out.printf("\nmatcher.group(4) value:%s", matcher.group(4));

PS:非捕获组

在左括号后紧跟 ?:,而后再加上正则表达式,构成非捕获组 (?:Expression)。

对于时间字符串:2017-04-25,表达式如下:

(?:\\d{4})-((\\d{2})-(\\d{2}))

这个正则表达式虽然有四个左括号,理论上有 4 个捕获组。但是第一组 (?:\d{4}),其实是被忽略的。当使用 matcher.group(4) 时,系统会报错。

编号捕获组匹配
0(\d{4})-((\d{2})-(\d{2}))2017-04-25
1((\d{2})-(\d{2}))04-25
2(\d{2})04
3(\d{2})25
public static final String P_UNCAP = "(?:\\d{4})-((\\d{2})-(\\d{2}))";
public static final String DATE_STRING = "2017-04-25";Pattern pattern = Pattern.compile(P_UNCAP);
Matcher matcher = pattern.matcher(DATE_STRING);
matcher.find();System.out.printf("\nmatcher.group(0) value:%s", matcher.group(0)); 
System.out.printf("\nmatcher.group(1) value:%s", matcher.group(1)); 
System.out.printf("\nmatcher.group(2) value:%s", matcher.group(2)); 
System.out.printf("\nmatcher.group(3) value:%s", matcher.group(3));// Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 4 
System.out.printf("\nmatcher.group(4) value:%s", matcher.group(4));

总结

  • 普通捕获组使用方便;
  • 命名捕获组使用清晰;
  • 非捕获组目前在项目中还没有用武之地。
http://www.hrbkazy.com/news/36720.html

相关文章:

  • 广告公司网站建设营销型网站建设题库
  • 绍兴做网站的网络销售怎么干
  • 佛山房地产网站建设seo怎么弄
  • 做阀门的英文网站怎么写怎么联系百度客服
  • 网站做成软件免费百度管理员联系方式
  • 晚上做设计挣钱的网站什么软件可以免费引流
  • 网站模板红黑百中搜优化软件靠谱吗
  • 跨境b2b网站怎么做最近三天的新闻大事
  • 网站建设公司 六安互联网关键词优化
  • 网站备案时间也太慢了搜索引擎优化排名品牌
  • 一个网站的页头大概做多大广州网站seo地址
  • wordpress手机版使用教程网站推广怎么优化
  • 网站开发 技术投标市场推广方案模板
  • 网站简单制作要怎么网络做推广
  • 新网站如何做流量精准引流怎么推广
  • 福州网站建设liedns北京网站建设公司哪家好
  • 化妆品网站建设方案项目书网上广告怎么推广
  • 限制个人做网站百度云网盘登录入口
  • wordpress微信货源模板百度seo提高排名费用
  • 重庆旅游网站建设百度指数查询入口
  • 建网站有什么要注意的最近新闻
  • 一个人做网站可以做什么seo优化教程下载
  • 做名宿比较好的网站seo是什么意思广东话
  • 新北网站建设重庆网站seo公司
  • wordpress添加订阅会员青岛seo网站排名
  • 网站建设目录结构设计视频推广平台
  • 微信扫一扫抽红包在哪里做网站近期国内新闻热点事件
  • b2b2c网站怎么做软文推广网
  • 都有哪些网站可以做推广科学新概念外链平台
  • php做网站seo是什么级别