正则表达式基础

NXP bootloader NXP bootloader 首先采用官方的bootloader, 直接keil下载即可 然后烧写官方的led_demo,注意,由于官方的失误,需要改一些东西,详情见: https://community.nxp.com/thread/492991 然后下一步修改自己的程序启动地址: ... 阅读详情

(转载自http://wenku.baidu.com/link?url=FhPUnozHMg)

正则表达式:符合一定规则的表达式,作用:用于专门操作字符串 
特点:用一些特定的符号来表示一些代码操作,这样就简化了代码的书写。 所以学习正则表达式,就是在学习一些特殊符号的使用: 好处:可以简化对字符串的复杂操作 
弊端:符号定义越多,正则越长,阅读性越差 具体操作功能: 
一、匹配:String.matches方法。用规则匹配这整个字符串,只要有一处不符合规则,就匹配结束,返回false. 二、切割:String.split方法 三、替换:String.replaceAll( )  
四、获取:将字符串中的符合规则的子串取出。Pattern.compile(regex); Pattern.matcher(str);Matcher.find();Matcher.group();   



一、匹配:String.matches方法。 

实例1、匹配QQ号 
 1、长度5~10位  2、不能以零开头  3、只能是数字,不能有非法数字  4、获取:将字符串中的符合规则的子串取出。 代码如下: 
  String qq = "12345"; 
  //"[1-9]"代表第一位字符可以是1-9的数字,"\\d{4,9}"代表下一位是数字,且至少有4-9个数字   String qqRegex="[1-9]\\d{4,9}"; 
  
System.out.println(qq.matches(qqRegex));. 
 
实例2、匹配电话号码: 
 
1、手机号以13XXXXX、15XXXXX、18XXXXXX开头,都11位数 代码如下:   String tel = "13a512345678"; 
//"[1]"代表第1位为数字1,"[358]"代表第二位可以为3、5、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。   String telRegex = "[1][358]\\d{9}";  
 
System.out.println(tel.matches(telRegex)); 


 

二、字符串切割: 

 实例1:"zhangsan,lisi,wangwu"切成三个字符串,按" , "进行切割 
   String str = "zhangsan,lisi,wangwu";   String reg = ","; 
  String[] strs = str.split(reg);   for(String name: strs) {    System.out.println(name); 
  } 
 实例2、 
  String str = "zhangsan   lisi  wangwu";   
String reg = " +";//"+"代表空格有1位或多位 
 实例3、   String str = "zhangsan.lisi.wangwu";   
String reg = ".";//这样切是错误的,这样一个字符串也切不出来,因为在正则表达式中“.”是一个特殊符号,有特殊的意义,它代表“任何字符”,所以要想传
达给正则表达式一个普通的“.”,则需要进行转义,用"\."也是不行的,因为这样转义完了"\"也就没有了,"\\." 这才是正确的 
 实例3、 
  str = "C:\\aa\bb\\cc.txt"; 
  
String reg = "\\\\";//按照 "//"进行切割 
 实例4、按照叠词进行切割,如”ekkabcffa"中的kk,ff就是叠词,也就是相同的任意连续的字符。   str = "C:\\aa\bb\\cc.txt";   str = "abcddeigkkasfe";  
 
String reg = "(.)\\1"; 
说明:"."加了括号"(.)"代表是一个组,则这个组是可以进行重用的,组的出现都有编号,从1开始。想要使用已有的组可以通过 \n的形式来获取(n代表编号)。注:((())()),这里一共有多少组呢?技巧,看左括号,有几个左括号就有几组,左边开始第一个左括号就是第一组,第二个左括号就是第二组,依次类推。  实例4、   str = "abcddddefgkkkkijk";  
 
String reg = "(.)\\1+";//"\1+"代表编号为1的组使用1次或多次 




三、替换:String.replaceAll( )  

实例1,假如论坛有人发贴,老发些电话号码、QQ号等广告。要求编写一个把电话号码、QQ号换成"#"号。 
public static String replaceAll(String str,String regex,String newStr){ 

  str = str.replaceAll(regex, newStr);   return str; 
 } 
 public static void main(String[] args) {   String str = "ab1581809622adfqq122202386ase"; 
  str = replaceAll(str,"\\d{5,}","#");//数字<=5,就替换成"#"。   System.out.println(str); 
 } 
 
实例2、替换叠词 
public static void replaceAll(String str,String regex,String newStr){   str = str.replaceAll(regex, newStr);   System.out.println(str); 
 } 
 public static void main(String[] args) {   String str = "aabcdeeeeefghiijk";   replaceAll(str, "(.)\\1", "#");  

打印结果为:#bcd##efgh#jk 
可以看到结果中的e被替换成两个#,解决方法,把正则表达式改为:"(.)\\1+"  即可   
实例3、把重复的字母替换成单个字母 
public static void replaceAll(String str,String regex,String newStr){   str = str.replaceAll(regex, newStr);   System.out.println(str); 
 } 
 public static void main(String[] args) {   
String str = "aabcdeeeeefghiijk"; 
  replaceAll(str, "(.)\\1+", "$1");//"$"美元符号,在正则表达中是特殊特号,"$1"用于在外面获取前一个正则表达式的第一个组  } 


四、获取:将字符串中的符合规则的子串取出。 

操作步骤: 
1、将正则表达式封装成对象 
2、让正则对象和要操作的字符串相关联 3、关联后,获取正则匹配引擎。 
4、通过引擎对符合规则的子串进行操作,比如取出。 
实例1、 
public static void main(String[] args) {   String str = "0122202386";   String regex = "[1-9]\\d{4,10}";   //1、将正则封装成对象p 
  Pattern p = Pattern.compile(regex);    
  //2、将字符串与p关联 
  Matcher m = p.matcher(str);    
  
System.out.println(m.matches());//其实String类中的matches方法是调用Pattern和Matcher对象来完成的。 

//只是被String封装后使用起来比较简单,但是功能单一。 
 } 
 
实例2、 
 public static void main(String[] args) {   String str = "ming tian jiu yao fang jie le,dai jia!";   String regex = "\\b[a-z]{3}";//  "\b"转义字符:代表单词边界   //1、将正则封装成对象p 
  Pattern p = Pattern.compile(regex);    
  //2、将字符串与p关联 
  Matcher m = p.matcher(str);    
  boolean b = m.find();//尝试查找与该模式匹配的输入序列的下一个子序列。  
 
System.out.println(b); 

  String getStr = m.group();//获取匹配过后符合规则的子字符串,所以要先进行find()操作   System.out.println(getStr); 
 } 
 
实例3、将字符串中所有3个字母的单词取出来: 
public static void main(String[] args) {   String str = "ming tian jiu yao fang jie le,dai jia!";   String regex = "\\b[a-z]{3}";//  "\b"转义字符:代表单词边界   //1、将正则封装成对象p 
  Pattern p = Pattern.compile(regex);    
  //2、将字符串与p关联 
  Matcher m = p.matcher(str);    
  while(m.find()){//尝试查找与该模式匹配的输入序列的下一个子序列。  
 
   String getStr = m.group();//获取匹配过后符合规则的子字符串,所以要先进行find()操作    System.out.println(getStr); 
  } 
 

实例4、注意使用matches方法后匹配器的指针位置 
public static void main(String[] args) {   String str = "ming tian jiu yao fang jie le,dai jia!";   String regex = "\\b[a-z]{3}\\b";   Pattern p = Pattern.compile(regex);   Matcher m = p.matcher(str); 
  System.out.println("m.matches = " + m.matches());//输出为false 
  //matches方法是将整个字符串进行匹配的,当匹配后,匹配器的指针指向了索引5处就结束了,所以使用find()方法时从此处开始   while(m.find()){      String getStr = m.group();    
System.out.println(getStr); 
   System.out.println(m.start() + "..." + m.end());//单词的开始/结束索引,这索引是包含头,不包含尾  
 

 } 
  
实例5、 将下列字符串转成:我要学编程. 
"我我...我我...我要..要要...要要...学学学....学学...编编编...编程..程.程程...程...程"  到底用四种功能中的哪一个呢?或者哪几个呢?  思路方式:  1,如果只想知道该字符是否对是错,使用匹配。  2,想要将已有的字符串变成另一个字符串,替换。  3,想要按照自定的方式将字符串变成多个字符串。切割。获取规则以外的子串。  4,想要拿到符合需求的字符串子串,获取。获取符合规则的子串。    /*   将已有字符串变成另一个字符串。使用 替换功能。   1,可以先将 . 去掉。   2,在将多个重复的内容变成单个内容。   */代码如下: 
public static void main(String[] args) {   String str = "我我...我我...我要..要要...要要...学学学....学学...编编编...编程..程.程程...程...程";   str = str.replaceAll("\\.+", "");   System.out.println(str); 
  str = str.replaceAll("(.)\\1+", "$1");   System.out.println(str); 
 } 
 
实例6、192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30  将ip地址进行地址段顺序的排序。 
  思路: 
 照字符串自然顺序,只要让它们每一段都是3位即可。 
 1,按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3位。  2,将每一段只保留3位。这样,所有的ip地址都是每一段3位。 
 
 public static void main(String[] args) {   String ip = "192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30";   ip = ip.replaceAll("(\\d+)", "00$1");//每段IP前加00   System.out.println(ip); 
  ip = ip.replaceAll("0*(\\d{3})", "$1");//每段IP取后3位数   System.out.println(ip);   String[] ips = ip.split(" ");   Arrays.sort(ips); 
  for(String ipp: ips) {//遍历排序后的IP    System.out.println(ipp);   } 
  System.out.println("-------------------------------------------");   for(String ipp: ips) {//遍历排序后的IP 
   System.out.println(ipp.replaceAll("0*(\\d+)", "$1"));//把IP段前面的0删除   } 
 } 
 
实例7、对邮件地址进行校验。 
 public static void main(String[] args) {   String mail = "abc12@sina.com"; 
  String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";//较为精确的匹配。   //reg = "\\w+@\\w+(\\.\\w+)+";//相对不太精确的匹配。,"/w"代表A-Za-z_0-9   //mail.indexOf("@")!=-1 //不可取 
  System.out.println(mail.matches(reg)); 
 } 
 
实例8、网页爬虫,爬email(获取email) (1)爬.txt文件 
public static void main(String[] args) throws Exception {   BufferedReader bufReader = new BufferedReader(new FileReader("D:\\临时文件夹\\java2\\mail.txt"));   String line = null; 
 
 
String regex = "\\w+@\\w+(\\.\\w+)+"; 

 while((line=bufReader.readLine()) != null){    Pattern p = Pattern.compile(regex);    Matcher m = p.matcher(line);    while(m.find()){     System.out.println(m.group()); 
   } 
  } 
 

(2)爬网络连接 
把WEB服务器打开,把资源.html文件放到服务器 
public static void main(String[] args) throws Exception {   URL url = new URL("http://localhost:8080/myweb/mail.html");   URLConnection conn = url.openConnection();  
 
  BufferedReader bufReader = new BufferedReader(new  
   
 
InputStreamReader(conn.getInputStream())); 
  String line = null; 
  String regex = "\\w+@\\w+(\\.\\w+)+";   while((line=bufReader.readLine()) != null){    Pattern p = Pattern.compile(regex);    Matcher m = p.matcher(line);    while(m.find()){     System.out.println(m.group()); 
   } 
  } 
 
}

傀儡进程学习 0x00 前言 最近做了一道18年swpuctf的题,分析了一个病毒,正巧都用到了傀儡进程,就想着把傀儡进程学习一下。本文权当个人的学习总结了一些网上的文章,如有错误,还请路过的大佬斧正。 0x01 SWPUCTF -- GAME 进入main函数 先获取当前目录,再拼上GAME.EXE 进入sub_4011D0 首先寻找资源,做准备工作,进入sub_4012C0 1)检测PE结构 2)CreateProcessA 创建进程 3)GetThreadContext... 阅读详情

相关推荐

掌握正则表达式:从基础到实用示例

本文介绍了正则表达式在Java编程中的基本概念和应用。首先,简要解释了正则表达式的语法规则,随后通过具体示例展示了如何在Java中使用正则表达式进行模式匹配、字符串替换和数据验证。通过理解和掌握正则表达式,开发者可以高效地处理复杂的字符串操作,提高代码的灵活性和可读性。希望本文能为读者提供有价值的参考,助力在实际开发中更好地利用正则表达式

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 11万+

EVM18xx

<br />EVM18xx

gogoyuan2010的专栏 2万+

JGUITextField_FormatNumber:格式化输入 手机号(XXX XXXX XXXX) 身份证号(15或者18位XXXXXX XXXXXXXX XXXX) 银行卡号(XXXX XXXX XXXX XXXX XXX ) 此项目主要用于一些号码的格式化输出,中间以空格分隔,删除的时候不会造成鼠标光标位置的混乱

JGUITextField_FormatNumber 格式化输入 手机号(XXX XXXX XXXX) 身份证号(15或者18位XXXXXX XXXXXXXX XXXX) 银行卡号(XXXX XXXX XXXX XXXX XXX ) 此项目主要用于一些号码的格式化输出,中间以空格分隔,删除的时候不会造成鼠标光标位置的混乱。 ##格式化输入 手机号(XXX XXXX XXXX) 身份证号(15或者18位XXXXXX XXXXXXXX XXXX) 银行卡号(XXXX XXXX XXXX XXXX XXX ) 此项目主要用于一些号码的格式化输出,中间以空格分隔,删除的时候不会造成鼠标光标位置的混乱。 具体使用步骤请参照demo的viewcontroller文件: 1.在项目中引入头文件 #import "UITextField+HLNumberFormatTextField.h

验证(15位或者18位)身份证号码的正确正则表达式

我们在开发页面的过程中难免会遇到一些表单验证,以下就对身份证号码进行验证,在开发过程中做的简单笔记: 身份证号码: 18位(xxxxxx yy MM dd xxxx) 15位(xxxxxx yy MM dd xxx) 正则表达式: /1\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}KaTeX parse error: Expected 'EOF',...

MrGuo522的博客 7万+

正则表达式基础语法大全

正则表达式基础语法 1.普通字符: 字母、数字、汉子、下划线、以及没有特殊定义的标点符号,都是“普通字符”。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。 2.简单的转义字符: 3.标准字符集合: - 能够与'多种字符' 匹配的表达式 - 注意区分大小写,大写是相反的意思 4.自定义字符集合: -[ ]方括号匹配方式,能够匹配方括号中任意一个字符 例如:[2-8a...

大学生小汪的成长博客 6万+

正则表达式基础使用

正则表达式基础使用 开发工具和关键技术:Adobe Dreamweaver CC 2017、弹性布局 作者:袁何恩 撰写时间:2019年2月20日 今天,和大家分享的技术是正则表达式基础使用。 正则表达式在我现在的所学知识的理解下是对字符串筛选的方式,把得到的字符串通过正则表达式的条件,匹配出自己想要的字符串。就像是找规律一样。 现在给大家介绍正则表达式基础代码。 正则表达式的代码有很多,我...

weixin_44561769的博客 198

shell编程之正则表达式——理论基础

目录前言一、 前言 正则表达式,又称规则表达式(Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑 sed是文本处理工具,可以读取文本内容,根据指定条件对数据进行添加,删除,替换等操作,被广泛应用于shell脚本 awk是

qq_48191100的博客 294

正则表达式: 从基础到进阶的语法指南

在编程和文本处理领域,正则表达式是一种描述文本模式的强大工具。无论是验证用户输入、提取文本信息,还是替换特定字符串,正则表达式都能高效完成任务。掌握正则表达式的语法,能让开发者在处理文本数据时如虎添翼。本文我将从基础语法入手,逐步深入到进阶用法,结合丰富的代码示例,带你全面掌握正则表达式的核心语法。

aa_hdkf_vg的博客 1692

shell编程--正则表达式基础正则表达式grep、扩展正则表达式egrep)

文章目录

kimowinter的博客 1102

正则表达式详解:从基础到扩展的全面指南

正则表达式详解:从基础到扩展 正则表达式是用于描述字符匹配模式的语法规则,广泛应用于Linux文本处理工具(如grep、sed、awk)中。本文系统讲解了正则表达式的概念、基础正则(BRE)和扩展正则(ERE)的核心元字符及用法。 基础正则支持的核心元字符包括行首/行尾锚定(^/$)、任意字符(.)、重复匹配(*/{n})和字符组([])等。扩展正则在此基础上增加了+、?、()、|等元字符,简化了复杂模式的编写。此外还介绍了特殊字符组(如[[:digit:]])的用法,用于简化常用字符范围的匹配。 通过实际

Sadsvit的博客 1000

正则表达式基础篇)

目录一、正则表达式的概念 一、正则表达式的概念 正则表达式(Regular Expression,常简写为RegExp或RE),又称规则表达式,通常用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是为字符串处理而生的, ...

夕山雨的博客 1万+

正则表达式基础学习

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),可以用来描述和匹配字符串的特定模式。

Reset 2054

图解总结正则表达式基础

下图总结了正则表达式基础知识,可以用于python爬虫、数据库查找等方面的应用。

weixin_41855010的博客 1431
上一篇: Java迭代器与迭代模式
下一篇: 程序员为什么要加班(转载)
panes
博客等级 码龄17年 5粉丝 18原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值