正则表达式: 各字符的解读

记录解读~~
说明参考

简单说明
e.g:/^\d$/ig
/i (忽略大小写)
/g (全文查找出现的所有匹配字符)
/m (多行查找)
/gi(全文查找、忽略大小写)
/ig(全文查找、忽略大小写)

* : 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+: 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
?: 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 。? 等价于 {0,1}。
{n,m}: m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
?: 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
\b: 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B: 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\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_]。
|: 或修饰,一般在()中使用

一、校验数字的表达式

  • 数字:^[0-9]*$
^: 表示开头
[0-9]: 中括号表达式
*: 限定符, 表示0次或者多次
$: 表示结尾
  • n位的数字:^\d{n}$
\d: 表示匹配数字, 相当于[0-9]
{n}: 是限定符,表示n位 
  • 至少n位的数字:^\d{n,}$
{n,}: 是限定符, 逗号后面没有具体的值, 表示n个以上,包括n
  • m-n位的数字:^\d{m,n}$
{m,n}: 指明限制条件 m-n , 包括m, n
  • 零和非零开头的数字:^(0|[1-9][0-9]*)$
(): 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用
|: 在这里表示或者
0|: 0或者后者
[1-9]: 表示只能出现1-9
[0-9]*: 在这里它俩是一个整体, * 修饰前面的[0-9], * 表示0次或者多次, 整体表示: 0-9可能出现0次或者多次
[1-9][0-9]*: 第一位肯定是1-9, 从第二位开始可以没, 也可能是无穷,但这些值只能在0-9中取, 所以是 1- 无限, 都可以匹配
  • 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(\.[0-9]{1,2})?$
^([1-9][0-9]*)+ : [1-9][0-9]*, 是非零开头的数字, + 是表示()中至少有一位
\. : \是转义的, 如果不用转义, . 表示除了换行符的所有字符 所以这里有个 .
[0-9]{1,2} , 0-9, 取1位或者2位
后面的?: 表示匹配0次或者1次, 在这里就表示可能有, 可能没 
  • 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$
^(\-)?: ()中的\-, 转义了-, 所以是-开始,但又是?非贪婪限定符, 表示开头的- 可能有,也可能无
\d+: 相当于[0-9]{1,} , 匹配数字, 至少一位
(\.\d{1,2}): \. 用了转义, 就表示.
\d 是[0-9]
{1,2}: 限定符, 1-2位, 包括1和2
  • 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
^(\-|\+)?: 开头可能是 - , 也可能是+ , 也可能 -+ 都没有
\d+: 至少有一位数字
(\.\d+): 点(数字结尾), 至少有一个数字
(\.\d+)?$: ?: 可能有, 也可能没有结尾, 所以解读是: 有可能有结尾,也可能, 如果有一定是.x 结尾, 到.后至少一位
  • 可能有两位小数的正实数, 也可以没有小数:^[0-9]+(\.[0-9]{2})?$
^[0-9]+: 0-9 , 至少一位开头
(\.[0-9]{2})?$: 可能没有结尾, 如果有, 一定是.xx , xx 表示0-9的数字
  • 可能有1~3位小数的正实数:^[0-9]+(\.[0-9]{1,3})?$
和上面那条差不多, 不同的是这里用到了限定符{1,3}, 所以规定了只能1-3位
  • 非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*)$ 或 ^\+?[1-9][0-9]*$
\d: 相当于[0-9]
*: 表示0次或者多次
\+?: 转义了+, ?: 表示可能有可能无
  • 非零的负整数:^\-[1-9][0-9]*$ 或 ^-[1-9]\d*$
^\-: - 开头
  • 非负整数:^\d+$ 或 ^[1-9]\d*|0$
^\d+$: 至少有一次的0-9
^[1-9]\d*|0$: 或者0
  • 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
^((-\d+)|(0+))$: -\d+, 至少有一个 -(0-9) 或者 0
  • 非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
^\d+: 以0-9开头, 至少一个
(\.\d+)?: 可能有, 可能无, 有的话是 .(至少[0-9]一位)
  • 非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
^((-\d+(\.\d+)?)
-\d+: 至少有一位 - 的0-9
(\.\d+)?: 可能有, 也可能无, 有的话, 是 至少一位 . [0-9]
| : 或
0+: 相当于0{1,} 
(\.0+)?: 可能有, 也可能无, 有的话是至少 .0 / .00000.... 都是合法的
  • 正浮点数:^[1-9]\d*\.\d+|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
^[1-9]\d*: 开头是: [1-9][0-9]{0,} , 就是 最少是1开始, 后面无限
\.\d+:  .[0-9]{1,}
|: 或
\.\d*:  .[0-9]{0,}
[1-9]\d*:  [1-9][0-9]{0,}
  • 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$

  • 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
^(-?\d+): 可能是以- [0-9]{1,} 开头, 也可能没有-
(\.\d+)?$: 可能是以.[0-9]{1,} 结尾, 也可能没有尾

二、校验字符的表达式

  • 汉字:^[\u4e00-\u9fa5]{0,}$
\u4e00-\u9fa5: 是汉字ASCII码表上的表示
{0,}: 可能无, 也可能无限个
  • 英文和数字:^[A-Za-z0-9]+$
^[A-Za-z0-9]+$: 以字母数字开头和结尾, 至少有一个才会匹配到

  • 长度为3-20的所有字符:^.{3,20}$
. :  表示除了换行符的所有字符
{3,20}: 限定符
  • 由26个英文字母组成的字符串:^[A-Za-z]+$
+: 表示至少有一个, 相当{1,}
  • 由26个大写英文字母组成的字符串:^[A-Z]+$
^[A-Z]+$: 开头结束都只能是A-Z , 至少一个, 不限制最大数
  • 由26个小写英文字母组成的字符串:^[a-z]+$
同上
  • 由数字、26个英文字母或者下划线组成的字符串:^\w+$
\w: 表示[A-Za-z0-9_] , 注意还有_
^\w+$: 至少有一个[A-Za-z0-9_], 开头和结尾, 不限最大位数
  • 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$ 或 ^[\u4E00-\u9FA5\w]+
\u4E00-\u9FA5: 中文
  • 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$
不要_
  • 可以输入含有^%&',;=?\"等字符:`[\^%&',;=?\x22]+`
\^: 这里必须要转义, 因为如果不加转义, 就表示^, 当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合
\x22(\xn): 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。所以\x22: 是表示双引号(")
  • 禁止输入含有~的字符:[^~]+ 或 ^[^~]+$
[^~]+: 表示除了~ 其他都匹配到
^[^~]+$: 表示整段string 如果包含有~都不匹配

三、特殊需求表达式

  • Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
首先我们要知道: email 的格式是 xxx@xxx.xxx  xxx 表示{1,}
所以这条正则是匹配到简的email 格式
^\w+: [A-Za-z0-9_]至少一个, 至多不限
([-+.]\w+)*: (-+.[A-Za-z0-9_]), * 表示: {0,} , 
@: 就是@
\w+([-.]\w+)*: 同上
\.: 转义了. , 所以就代表.
\w+([-.]\w+)*$: 以[A-Za-z0-9_]结尾 , 可能尾数还有 -.[A-Za-z0-9_] , 也可能没有
  • 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?
[a-zA-Z0-9][-a-zA-Z0-9]{0,62}: 表示第一位只能是a-zA-Z0-9中选择, 后面的可能无/有, 限制是{0,62},可选择的值为: [-a-zA-Z0-9]
(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+: ()中的至少有一项
最后的\.?: 表示可能有. 也可能没有
  • InternetURL:[a-zA-z]+://[^\s]*
[a-zA-z]+: 至少有一个字母
://:  在这里就表示://
\s: 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]
\S: 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
[^\s]*: 也可以写成[\S]*, 表示如果有, 也只能是任何非空白字符
  • 手机号码:^(13[0-9]|14[5|7]|15[0-9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9]): 开头| 是或者的意思, [0-9]默认是匹配一位, 所以开头最多三位,13 14 15 18 就代表这些数字
\d{8}$: 结尾是数字结尾, 一个是8位
  • 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
\(: 就是转义( , 表示匹配(
\d{3,4}-: 3-4位的数字和-
^(\(\d{3,4}-): (三到四位的数字开头和-)
|: 或者
\d{3.4}-: 这里匹配没有()的三到四位的数字开头和-
^(\(\d{3,4}-)|\d{3.4}-)?: 最后的?表示可能是以这开头, 也可能没有
\d{7,8}$: 结尾肯定是七或八位的数字
  • 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
\d{3}: 三位数字
-: - 就是-
\d{8}: 八位数字
|: 或者
\d{4}-\d{7}: 四位数位-七位数字
  • 电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号): ((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{1-4})|(\d{7,8})-(\d{1-4}))$)
\d: 相当于[0-9]
(\d{11})|: 十一位数字或者
^((\d{7,8}): 七或者八位数字
(\d{4}|\d{3})-(\d{7,8}): 三或四位-七或八位
(\d{4}|\d{3})-(\d{7,8})-(\d{1-4}): (三或四位-七或八位)-(一位或二位或三或四数字)
(\d{7,8})-(\d{1-4}): 七或八位数字-三或四位数字
  • 身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)
(^\d{15}$): 以十五位数字开始和结尾
(^\d{18}$): 以十八位数字开始和结尾
(^\d{17}(\d|X|x)$): 十七位数字开头, 一位数字或X或x结尾
  • 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
^[a-zA-Z]: 开头是a-zA-Z
[a-zA-Z0-9_]{4,15}: {4,15}是修饰前面的[a-zA-Z0-9_], 加上第一位, 所以是{5,16}
  • 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
^[a-zA-Z]: 开头是字母
\w{5,17}$: \w相当于[A-Za-z0-9_],{5,17}的解释同上, 加上前面的一位,所以是{6,18}
  • 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$
    ref:
用到了分组
* : 匹配前面的子表达式零次或多次, 相当于: {0,}
. : 匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像"(.|\n)"的模式
.*: 匹配任意文本
?=: 正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?=.*\d): 相当于(?=.{0,}[0-9]) , 匹配(零次或多次除换行符(\n、\r)之外的任何单个字符)前面的值, 剩下数字, 表示一定要匹配数字
(?=.*[a-z])(?=.*[A-Z]): 同上
如果想也一定要匹配_:  `^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*_)[\w]{8,10}$`
  • 强密码(必须包含大小写字母和数字的组合,可以使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
和上一条差不多
.: 匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像"(.|\n)"的模式
所以是可以有特殊字符, 但大小写字母和数字是一定要
(?=.*\d): \d表示一定要, 但最后的表达式一定要包括\d
  • 日期格式:^\d{4}-\d{1,2}-\d{1,2}
^\d{4}-\d{1,2}-\d{1,2}: 四位数字-一或者二位数字-一或者二位数字
  • 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
0?[1-9]: 0可能有也可能无,但只能配一到九
|: 或
1[0-2]: 就是表示10,11,12
  • 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
(0?[1-9]): 有没0都可以,后面是1-9
((1|2)[0-9]): (1|2): 一或二, [0-9]: 就是0到9, 如果没特指几位, 默认是一位
|30|31: 或30或31
钱的输入格式:

有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$

[1-9]: 一位
[0-9]*: *相当{0,}

这表示任意一个不以0开头的数字,但可以是0:^(0|[1-9][0-9]*)$

开头0先独立出去
[1-9]: 取一位
[0-9]*: [0-9]{0,} 

一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$

0|-?: 0或者-, 可能有也可能无
[1-9][0-9]*: 1-无穷的整数

必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.0" 是通过的:^[0-9]+(.[0-9]{1,})?$

[0-9]+: 至少有一位
(.[0-9]{1,})?: 可以没有,如果有.后面必须是0-9的2位

这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$

[0-9]{1,3}: 一到三位的0-9
(,[0-9]{3})*: (, 0-9), 三位,可能有无数次也可以0次
(.[0-9]{1,2}: (.0-9), 一到两位
?: 可能无,可能有

1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$

备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里

  • xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[x|X][m|M][l|L]$
[a-zA-Z]+: 这里的+是{1,}
-?: 就是-{0,1}
([a-zA-Z]+-?)+: 大小字母开,-可有可无
\.[x|X][m|M][l|L]$: 大小写的xml 都匹配
  • 中文字符的正则表达式:[\u4e00-\u9fa5]
  • 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
  • 空白行的正则表达式:\n\s*\r (可以用来删除空白行)
  • HTML标记的正则表达式:<(\S*?)[^>]*>.*?|<.*? /> ( 首尾空白字符的正则表达式:^\s*|\s*$(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
\S: 注意这里是大S, 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
/s: 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
(\S*?): 匹配任何非空白字符, 可能有可能无
[^>]*: 相当[^>]{0,} , 不管有多少个>都排队
<(\S*?)[^>]*>: <(匹配任何非空白字符, 可能有可能无,排除>)>
. : 匹配除换行符(\n、\r)之外的任何单个字符
.*?: 匹配{0,}次的除换行符之外的任何字符, 没有也可以
<.*?/>: <(除换行符任何字符都行,没有也行)/>
  • 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
[1-9][0-9]{4,}: 至少5位, 从10000开始
  • 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
?!: 正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如"Windows(?!95|98|NT|2000)"能匹配"Windows3.1"中的"Windows",但不能匹配"Windows2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
当前向查找分组里面的正则表达式匹配失败的时候才继续后面的匹配过程
[1-9]\d{5}(?!\d): 会以分组的形式返回, 比如678788kjhk878888, 它会匹配到 678788 & 878888
  • (?:pattern): 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。

  • 香港电话: /^((?!999)([2-9][0-9]{7}))$/

(?!999): ?! , 正向否定预查, 表示不匹配它, 999开头也不行
```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容