Skip to content

Commit

Permalink
优化文章
Browse files Browse the repository at this point in the history
  • Loading branch information
leo-qi committed Mar 5, 2017
1 parent f62e6ea commit 8faa8ea
Showing 1 changed file with 12 additions and 13 deletions.
25 changes: 12 additions & 13 deletions _posts/2017-02-28-regular-expression-1.markdown
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
layout: post
title: 正则表达式学习(一): 元字符与转义
title: 正则表达式学习(一)元字符与转义
Date: 2017-2-28
author: "Leo Qi"
catalog: true
Expand Down Expand Up @@ -40,24 +40,24 @@ tags:
|------|-----|-----
|a] || |
|ab] | | √

另外,因为方括号本身可以表示字符组『[0-9]』,所以在字符组内部的闭方括号在任何情况下都要转义,否则类似『[]]』的正则表达式会出现二义性,造成识别错误。
如果需要匹配方括号内(包括方括号),至少包含一个字符的字符串(比如[text]),所用的正则表达式就应该是:『\[[^\]]+]』。

\[』匹配开方括号,然后用一个排除型字符组匹配“除闭方括号 ] 之外的任意字符(注意,在字符组内部,闭方括号 ] 一定需要转义),用『+』表示它至少要出现一次以上,最后用一个『]』匹配闭方括号。

java中转义序列(escape sequence)用来表示特殊字符,比如\n表示换行符,\t表示制表符,而\[并不是Java能识别的转义序列。为了表示“正则表达式中的\[”,我们传递给Pattern.compile()的字符串必须正确表示\[——在字符串中,[ 是不需要转义的,而 \ 是需要转义的,所以在字符串中,应该写做 \\[
|
----| ----
字符串的表现层 | \\[
字符串的概念层 | \[
正则表达式的表现层 | \[
正则表达式的概念层 | [(非元字符)

| 字符串的表现层|\\[
|----| ----
|字符串的概念层 | \[
|正则表达式的表现层 | \[
|正则表达式的概念层 | [(非元字符)

这也是为什么正则表达式的转义序列在正则表达式中要写两个反斜线了,比如 \+ 要写成 \\+ 。但是 \n 之类的有点特殊,无论你写成 \n 或是 \\n ,结果都是一样,\t之类的情况与此类似。

||||
| ----- | ----- | ----- |
|字符串的表现层 | \\n | \n|
| ----- | ----- | ----- |
|字符串的概念层 | \n | 换行符|
|正则表达式的表现层 | \[ | 换行符|
|正则表达式的概念层 | 换行符 | 换行符|
Expand All @@ -66,20 +66,19 @@ java中转义序列(escape sequence)用来表示特殊字符,比如\n表

"\".matches("\\\\"); //true

|||
| ----- | ----- |
|字符串的表现层 |\\\\\\\
| ----- | ----- |
|字符串的概念层|\\\
|正则表达式的表现层|\\\
|正则表达式的概念层|\(非元字符)

### 正则表达式全部符号解释 ###

摘自(维基百科)[https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F]
摘自[维基百科 https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F](https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F)

|字符|描述
| ----- | -----
|\| 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。
|\ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。
|^| 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
|$| 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
|*| 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
Expand Down

0 comments on commit 8faa8ea

Please sign in to comment.