盒子
盒子
Posts List
  1. 正则表达式的作用
  2. 正则表达式语法1
  3. 正则表达式语法2
  4. 正则表达式语法3
  5. 正则表达式语法4
  6. 正则表达式语法5
  7. 位置的匹配
  8. 正则表达式语法6
  9. 正则表达式7
  10. 一个关于邮箱用户名的匹配

有关正则表达式

正则表达式的作用

1.测试字符串内的模式:

例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。

2.替换文本:

可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。

3.基于模式匹配从字符串中提取子字符串。

4.可以查找文档内或输入域内特定的文本。

正则表达式语法1

普通字符

字母、数字、汉字、下划线、以及没有特殊定义的标点符号,都是“普通字符”
像这样的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。

转义字符

  **\n**  代表换行符    
  **\t**  代表制表符    
  **\\\\**  代表\本身     

匹配字符本身的转义字符:    

\^  \$  \(  \)  \{  \}  \?  \+  \*  \|  \[  \]    

正则表达式语法2

标准字符

**\d**  0~9中的任意一个数字    
**\w**  A~Z、a~z、_  (任意一个数字 字母下划线)    
**\s**  空格 制表符 换行符    
**.**   小数点可以匹配任意一个字符    

**注意:\后面对应上边字母的大写则匹配的正好相反**    
**比如 **\D** 匹配的是非数字**    

正则表达式语法3

既有标准字符,就会有为了满足某些特定需要的自定义字符
自定义字符

**[]** 方括号 能够匹配方括号中任意一个字符    
**[^xxx]** 匹配除了xxx之外的任意一个字符    
**[a-c]** 匹配'a'-'c'之间的任意一个字母    

正则表达式语法4

修改匹配次数的符号

**{n}** 表达式重复n次     
**{m,n}** 表达式可重复m到n次     
**{m,}** 表达式至少重复m次    
**?**  匹配表达式0次或者1次 相当于{0,1}    
**+** 表达式至少出现一次 相当于{1,}    
**\***  表达式不出现或者出现任意次 相当于{0,}    

关于匹配次数中的贪婪模式和非贪婪模式

贪婪模式也是默认的模式:匹配字符越多越好
比如:

正则表达式为 \d{2,5}    

而等待匹配的有如下:    
                 1234 2345 23 345 6 
                 1234567890

匹配的结果就是 数字个数只要符合数字2-5之间 都会尽最多个数数字匹配 当然数字6不会被匹配 1234567890被分开匹配成两个五位数

非贪婪模式:匹配字符越少越好
比如:

正则表达式为 \d{2,5}    

而等待匹配的有如下:    
                 1234 2345 23 345 6 
                 1234567890

会发现匹配的结果是 数字个数只要符合2—5之间 都会尽最少个数数字匹配 1234567890被分开匹配成五个两位数

正则表达式语法5

位置的匹配

**^([]外的符号)** 与字符串开始的地方匹配    
**$** 与字符串结束的地方匹配    
**\b** 匹配一个单词的边界     

比如:

正则表达式为 ^ab     

等待匹配的有如下:    
               ab ab ab
               ab 

会发现匹配的结果是 只有第一行第一个ab匹配

比如:

正则表达式为 ab$     

等待匹配的有如下:    
               ab ab ab
               ab  

会发现匹配的结果是 只有第二行最后一个ab匹配

比如:

正则表达式为 aa\b    

等待匹配的有如下:    
               aa aa123 123aa bbaa     

会发现匹配的结果是 aa 123aa bbaa 可以匹配 而aa123 就不行了

正则表达式语法6

**选择符 |**    匹配选择符左边和右边的字符    
**()**   括号中的表达式可以作为整体被修饰   

反向引用

一个关于反向引用的例子:

正则表达式为: ([a-z]){2}\1     
(\后边可以为1-9之间的任何数字 意思为引用第几层的表达式 从左边数括号的个数有几个 就有几层引用 在这里为引用第一层)    

要匹配的字符串有以下: 
                  abab  cdcd abac   

匹配的结果就是 abab cdcd 均可以匹配 而abac就不行 不满足条件

正则表达式7

**?=xxx** 断言自身出现的位置的后面能匹配表达式xxx
**?<=**  断言自身出现的位置的前面能匹配表达式xxx
**?!xxx** 断言自身出现的位置的后面不能匹配表达式xxx
**?<!xxx** 断言自身出现的位置的前面不能匹配表达式xxx

一个关于邮箱用户名的匹配

邮箱有以下这些格式:    
                 dasaf@163.com    
                 123556@qq.com
                 sfs_@fdfs.com.cn
                 safdf@ff.cn
                 dasd-asd@dsf.ORG

用这个正则表达式便可以将其全部匹配下来:
             ([\w-]+)@([\w-]+)(\.[a-zA-Z]{2,5}){1,2}    
支持一下
扫一扫,支持forsigner