Go最新正则表达式的贪婪和非贪婪匹配_正则匹配 非贪婪复制,2024年最新如何保证高可用

12 篇文章 0 订阅
12 篇文章 0 订阅

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

eg:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class regular_expression {
public static void main(String[] args) {
String str = “北京市(重庆市)(武汉市)(广州市)”;
String patStr = “.*?(?=\()”;
Pattern pattern = Pattern.compile(patStr);//创建Pattern对象,它是正则表达式的编译表示
Matcher matcher = pattern.matcher(str);//创建Matcher对象,它是对输入的字符串进行解释和匹配操作的引擎
if(matcher.find()) {
System.out.println(matcher.group(0));
}else {
System.out.println(matcher.group(0));
}
}
}

该例子中正则表达式.代表除回车的任意字符,*代表匹配任意多个(+也可以)

什么是 RegExp?

RegExp 是正则表达式(Regular expression)的缩写,作用是对字符串执行模式匹配。

通常用于格式验证、正则替换、查找子串等

各种编程语言的正则表达式基本相同,不同的语言可能会有一些细小的差别

RegExp 语法

1.// 直接实例化

2.var reg = new RegExp(pattern [, flags])

3.// 隐式创建(推荐)

4.var reg = /pattern/flags;

参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。

参数 [, flags] 是一个可选的字符串,包含属性 “g”(global )、”i” (ignoreCase)和 “m”(multiline)。

ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。

概念:子表达式

在正则表达式中,使用括号括起来的内容是一个子表达式,子表达式匹配到的内容会被系统捕获至缓冲区,使用\n(n:数字)来反向引用系统的第n号缓冲区的内容。

场景:后面的内容要求与前面的一致,可以使用子表达式

1.// 查找连续相同的四个数字

2.var str = “1212ab45677778cd”;

3.var reg = /(\d)\1\1\1/gi;

4.console.log(str.match(reg));

5.// OUTPUT:7777

概念:方括号(字符簇)

1.var str = “Is this all there is?”;
2.var patt1 = /[a-h]/g;
3.document.write(str.match(patt1));
4.// OUTPUT:h,a,h,e,e

方括号 作用

方括号作用
[abc]查找方括号之间的任何字符。
[^abc]查找任何不在方括号之间的字符。
[0-9]查找任何从 0 至 9 的数字。同 \d
[a-z]查找任何从小写 a 到小写 z 的字符。
[A-Z]查找任何从大写 A 到大写 Z 的字符。
[A-z]查找任何从大写 A 到小写 z 的字符。
[0-9a-zA-Z]查找0-9,a-z,A-Z

概念:元字符

元字符(Metacharacter)是拥有特殊含义的字符:

元字符 | 作用 
—|— 
\ | 转义符 (、)、/、\ 
| | 选择匹配符,可以匹配多个规则 
. | 查找单个字符,除了换行和行结束符。 
\w | 查找单词字符。字符 ( 字母 ,数字,下划线_ ) 
\W | 查找非单词字符。 
\d | 查找数字。 
\D | 查找非数字字符。 
\s | 查找空白字符。空格 
\S | 查找非空白字符。 
\b | 匹配单词边界。 
\B | 匹配非单词边界。 
\0 | 查找 NUL 字符。 
\n | 查找换行符。 
\f | 查找换页符。 
\r | 查找回车符。 
\t | 查找制表符。 
\v | 查找垂直制表符。 
\xxx | 查找以八进制数 xxx 规定的字符。 
\xdd | 查找以十六进制数 dd 规定的字符。 
\uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。

概念:量词

量词作用
n+匹配任何包含至少一个 n 的字符串。同 {1,}
n*匹配任何包含零个或多个 n 的字符串。同 {0,}
n?匹配任何包含零个或一个 n 的字符串。同 {0,1}
n{X}匹配包含 X 个 n 的序列的字符串。
n{X,Y}匹配包含 X 至 Y 个 n 的序列的字符串。
n{X,}匹配包含至少 X 个 n 的序列的字符串。
n$匹配任何结尾为 n 的字符串。
^n匹配任何开头为 n 的字符串。注意 /[^a] / 和 /^ [a]/是不一样的,前者是排除的,后者是代表首位。
(?=n)匹配任何其后紧接指定字符串 n 的字符串。正向预查
(?!n)匹配任何其后没有紧接指定字符串 n 的字符串。反向预查

RegExp 对象方法

test()

test() 方法检索字符串中是否存在指定的值。返回值是 true 或 false。

1.var patt1 = new RegExp(‘e’);
2.console.log(patt1.test(‘some text’));
3.// OUTPUT:true
4.var patt2 = new RegExp(‘ee’);
5.console.log(patt2.test(‘some text’));
6.// OUTPUT:false

1.// 判断是不是QQ号
2.// 1 首位不能是0  1
3.// 2 必须是 [5, 11] 位的数字 \d{4, 9}
4.var str = ‘80583600’;
5.var regexp = /2[0-9]{4,10}$/gim;
6.if (regexp.test(str)) {
7.    alert(‘is’);
8.} else {
9.    alert(‘no’);
10.}

exec()

exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。

1.var patt1 = new RegExp(‘e’);
2.console.log(patt1.exec(‘some text’));
3.// OUTPUT:e
4.var patt2 = new RegExp(‘ee’);
5.console.log(patt2.exec(‘some text’));
6.// OUTPUT:null

compile()

compile() 既可以改变检索模式,也可以添加或删除第二个参数。

1.var patt1=new RegExp(“e”);
2.document.write(patt1.test(“The best things in life are free”)); // true
3.// 改变了检索模式
4.patt1.compile(“eee”);
5.document.write(patt1.test(“The best things in life are free”)); // false
支持正则表达式的 String 对象的方法

search 检索与正则表达式相匹配的值。

1.var str = “Visit W3School!”
2.console.log(str.search(/W3School/))
3.// OUTPUT:6
match 找到一个或多个正则表达式的匹配。

1.var str=“1 plus 2 equal 3”
2.console.log(str.match(/\d+/g))
3.// OUTPUT:1,2,3
replace 替换与正则表达式匹配的子串。

1.var str = “Visit Microsoft!”
2.console.log(str.replace(/Microsoft/, “W3School”));
3.// OUTPUT:Visit W3School!
1.// 找重复项最多的字符个数
2.var str = ‘g21ss4aeba_ersb43sgnnsssstht6sss60snnsj8resw0_ss’;
3.// split : 将字符串转化为数组
4.// sort : 对数组排序,ASCII
5.// join : 将数组转化为字符串
6.var str_new = str.split(‘’).sort().join(‘’);
7.document.write(str + ‘
’);
8.document.write(str.split(‘’) + ‘
’);
9.document.write(str.split(‘’).sort() + ‘
’);
10.document.write(str.split(‘’).sort().join(‘’) + ‘
’);
11.// 匹配字符,且重复这个字符,重复次数至少一次。
12.var regexp = /(\w)\1+/g;
13.var index = 0;
14.var value = ‘’;
15.str_new.replace(regexp, function($0, $1) {
16.    // document.write($0);
17.    // document.write($1);
18.    if (index < $0.length) {
19.        index = $0.length;
20.        value = $1;
21.    }
22.});
23.document.write(‘重复项最多的字符是:’ + value + ‘,个数是:’ + index);
24.// OUTPUT:
25.// 0012344668__aabbeeegghjnnnnrrssssssssssssssssttw
26.// 重复项最多的字符是:s,个数是:16
split 把字符串分割为字符串数组。

1.var str = “How are you doing today?”
2.document.write(str.split(/\s+/));
3.// OUTPUT:How,are,you,doing,today?

经验:

检验格式(邮箱格式、IP格式)是否正确,用test() 
抓取星期(如所有手机号),用exec()、match() 
替换敏感词汇,用replace()

常见的 正则表达式 校验

1.// 常见的 正则表达式 校验
2.// QQ号、手机号、Email、是否是数字、去掉前后空格、是否存在中文、邮编、身份证、URL、日期格式、IP
3.var myRegExp = {
4.    // 检查字符串是否为合法QQ号码
5.    isQQ: function(str) {
6.        // 1 首位不能是0  3
7.        // 2 必须是 [5, 11] 位的数字  \d{4, 9}
8.        var reg = /4[0-9]{4,9}KaTeX parse error: Expected 'EOF', got '}' at position 237: …    } 16.    }̲, 17.    // 检…/;
20.        if (reg.test(str)) {
21.            console.log(‘手机号码格式输入正确’);
22.            return true;
23.        } else {
24.            console.log(‘请输入正确格式的手机号码’);
25.            return false;
26.        }
27.    },
28.    // 检查字符串是否为合法Email地址
29.    isEmail: function(str) {
30.        var reg = /^\w+((-\w+)|(.\w+))*@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+)*.[A-Za-z0-9]+$/;
31.        // var reg = /\w+([-+.]\w+)*@\w+([-.]\w+)*.\w+([-.]\w+)*/;
32.        if (reg.test(str)) {
33.            console.log(‘Email格式输入正确’);
34.            return true;
35.        } else {
36.            console.log(‘请输入正确格式的Email’);
37.            return false;
38.        }
39.    },
40.    // 检查字符串是否是数字

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

/ 检查字符串是否是数字

[外链图片转存中…(img-SljVRKls-1715897825654)]
[外链图片转存中…(img-REAiJlFc-1715897825654)]
[外链图片转存中…(img-pf1msPlq-1715897825654)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取


  1. 1-9 ↩︎

  2. 1-9 ↩︎

  3. 1-9 ↩︎

  4. 1-9 ↩︎

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值