|
|
用户名:flykey 笔名:flykey 地区: 陕西-西安 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
http://hi.baidu.com/flykey 华丽丽的变身成为技术博客
我转了博客了
(作者置顶)
ASP.NET正则表达式应用小结
只能输入数字:"^[0-9]*$"。
只能输入n位的数字:"^\d{n}$"。
只能输入至少n位的数字:"^\d{n,}$"。
只能输入m~n位的数字:。"^\d{m,n}$"
只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。
只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。
只能输入非零的正整数:"^\+?[1-9][0-9]*$"。
只能输入非零的负整数:"^\-[1-9][]0-9"*$。
只能输入长度为3的字符:"^.{3}$"。
只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。
只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。
验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
验证是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"。
验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。
验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。
验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。
利用正则表达式限制网页表单里的文本框输入内容:
用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1
s="http://www.9499.net/page1.htm"
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
alert(s)
匹配双字节字符(包括汉字在内):[^\x00-\xff]
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}
利用正则表达式分解和转换IP地址:
下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:
function IP2V(ip)
{
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}
不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:
var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
符号解释:
字符描述
\
将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。
^
匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
$
匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
*
匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+
匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
?
匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n}
n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,}
n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{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'。
.
匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
(pattern)
匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。
(?:pattern)
匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
(?=pattern)
正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)
负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
x|y
匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
[xyz]
字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^xyz]
负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
[a-z]
字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。
[^a-z]
负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。
\b
匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B
匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\cx
匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\d
匹配一个数字字符。等价于 [0-9]。
\D
匹配一个非数字字符。等价于 [^0-9]。
\f
匹配一个换页符。等价于 \x0c 和 \cL。
\n
匹配一个换行符。等价于 \x0a 和 \cJ。
\r
匹配一个回车符。等价于 \x0d 和 \cM。
\s
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S
匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t
匹配一个制表符。等价于 \x09 和 \cI。
\v
匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w
匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
\W
匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
\xn
匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。.
\num
匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。
\n
标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
\nm
标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
\nml
如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
\un
匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。
---
^[A-Za-z\-]+$ //这个是表明输入的名字只能是字母和连字符组成
^(\+\d+ )?(\(\d+\) )?[\d ]+$ //这个是国际通用的电话号码判断
^(1[0-2]\d|\d{1,2})$ //这个是年龄的判断
^\d+\.\d{2}$ //这个是判断输入的是否为货币值
^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$ //email地址
^[a-za-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\s*)?$ //url
^\d+$ //非负整数
^[0-9]*[1-9][0-9]*$ //正整数
^((-\\d+)|(0+))$ //非正整数
^-[0-9]*[1-9][0-9]*$ //负整数
^-?\\d+$ //整数
^\\d+(\\.\\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+)?)|(0+(\\.0+)?))$ //非正浮点数
^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ //负浮点数
^(-?\\d+)(\\.\\d+)?$ //浮点数
^[a-za-z]+$ //由26个英文字母组成的字符串
^[a-z]+$ //由26个英文字母的大写组成的字符串
^[a-z]+$ //由26个英文字母的小写组成的字符串
^[a-za-z0-9]+$ //由数字和26个英文字母组成的字符串
^\\w+$ //由数字、26个英文字母或者下划线组成的字符串
dropdownlist绑定后,如何设置选中项
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource1"
DataTextField="subject" DataValueField="id" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:strconn %>"
SelectCommand="SELECT [id], [subject] FROM [web_about]"></asp:SqlDataSource>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
Response.Redirect(Request.Path + "?id=" + DropDownList1.SelectedItem.Value);
}
C#(ASP.NET)DateTime日期类型格式化显示
ASP.NET正则表达式应用小结
只能输入数字:"^[0-9]*$"。
只能输入n位的数字:"^\d{n}$"。
只能输入至少n位的数字:"^\d{n,}$"。
只能输入m~n位的数字:。"^\d{m,n}$"
只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。
只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。
只能输入非零的正整数:"^\+?[1-9][0-9]*$"。
只能输入非零的负整数:"^\-[1-9][]0-9"*$。
只能输入长度为3的字符:"^.{3}$"。
只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。
只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。
验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
验证是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"。
验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。
验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。
验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。
利用正则表达式限制网页表单里的文本框输入内容:
用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1
s="http://www.9499.net/page1.htm"
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
alert(s)
匹配双字节字符(包括汉字在内):[^\x00-\xff]
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}
利用正则表达式分解和转换IP地址:
下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:
function IP2V(ip)
{
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}
不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:
var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
符号解释:
字符描述
\
将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。
^
匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
$
匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
*
匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+
匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
?
匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n}
n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,}
n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{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'。
.
匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
(pattern)
匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。
(?:pattern)
匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
(?=pattern)
正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)
负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
x|y
匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
[xyz]
字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^xyz]
负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
[a-z]
字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。
[^a-z]
负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。
\b
匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B
匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\cx
匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\d
匹配一个数字字符。等价于 [0-9]。
\D
匹配一个非数字字符。等价于 [^0-9]。
\f
匹配一个换页符。等价于 \x0c 和 \cL。
\n
匹配一个换行符。等价于 \x0a 和 \cJ。
\r
匹配一个回车符。等价于 \x0d 和 \cM。
\s
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S
匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t
匹配一个制表符。等价于 \x09 和 \cI。
\v
匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w
匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
\W
匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
\xn
匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。.
\num
匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。
\n
标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
\nm
标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
\nml
如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
\un
匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。
---
^[A-Za-z\-]+$ //这个是表明输入的名字只能是字母和连字符组成
^(\+\d+ )?(\(\d+\) )?[\d ]+$ //这个是国际通用的电话号码判断
^(1[0-2]\d|\d{1,2})$ //这个是年龄的判断
^\d+\.\d{2}$ //这个是判断输入的是否为货币值
^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$ //email地址
^[a-za-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\s*)?$ //url
^\d+$ //非负整数
^[0-9]*[1-9][0-9]*$ //正整数
^((-\\d+)|(0+))$ //非正整数
^-[0-9]*[1-9][0-9]*$ //负整数
^-?\\d+$ //整数
^\\d+(\\.\\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+)?)|(0+(\\.0+)?))$ //非正浮点数
^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ //负浮点数
^(-?\\d+)(\\.\\d+)?$ //浮点数
^[a-za-z]+$ //由26个英文字母组成的字符串
^[a-z]+$ //由26个英文字母的大写组成的字符串
^[a-z]+$ //由26个英文字母的小写组成的字符串
^[a-za-z0-9]+$ //由数字和26个英文字母组成的字符串
^\\w+$ //由数字、26个英文字母或者下划线组成的字符串
SqlServer得DateTime类型数据中的日期(仅年月日)
select convert(varchar(10),columnname,120) from tablename
yyyy-mm-dd
通过日本感悟到的
类型"string"的值无法转换为"System.Drawing.Color"
轻松构建Asp.Net2.0 GridView复合多层表头(不限级)!!!
三层

等级#级别#上期结存 件数,重量,比例#本期调入 收购调入 件数,重量,比例#本期发出 车间投料 件数,重量,比例#本期发出 产品外销百分比 件数,重量,比例#平均值
调用说明:使用时在GridView的RowCreated事件中加入下面代码调用
if (e.Row.RowType == DataControlRowType.Header)
{
DynamicTHeaderHepler dHelper = new DynamicTHeaderHepler();
string header = "等级#级别#上期结存 件数,重量,比例#本期调入 收购调入 件数,重量,比例#本期发出 车间投料 件数,重量,"
+ "比例#本期发出 产品外销百分比 件数,重量,比例#平均值";
dHelper.SplitTableHeader(e.Row, header);
}
表头生成类:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.Collections;
public class DynamicTHeaderHepler
{
public DynamicTHeaderHepler()
{
//
// TODO: Add constructor logic here
//
}
/**//// <summary>
/// 重写表头
/// </summary>
/// <param name="targetHeader">目标表头</param>
/// <param name="newHeaderNames">新表头</param>
/// <remarks>
/// "工作人员#岗位#销售量 金卡 全销售,转介销售,转介#销售量 金葵花卡 全销售,转介销售,转介#销售量 金卡 全销售,转介销售,转介#"
///+ "销售量 信用卡 全销售#销售量 快易理财 全销售,转介销售,转介#销售量 专业版 全销售,转介销售,转介#"
///+ "销售量 三方存管 全销售,转介销售,转介#销售量 保险 全销售,转介销售,转介#销售量 非货币基金 全销售,转介销售,转介#"
///+ "销售量 本外币理财 全销售,转介销售,转介#销售量 新增存款 全销售#销售积分#转介积分#合计积分"; ///
/// </remarks>
public void SplitTableHeader(GridViewRow targetHeader, string newHeaderNames){
TableCellCollection tcl = targetHeader.Cells;//获得表头元素的实例
tcl.Clear();//清除元素
int row = GetRowCount(newHeaderNames);
int col = GetColCount(newHeaderNames);
string[,] nameList = ConvertList(newHeaderNames,row,col);
int RowSpan = 0;
int ColSpan = 0;
for (int k = 0; k < row; k++)
{
string LastFName = "";
for (int i = 0; i < col; i++)
{
if (LastFName == nameList[i, k] && k!=row-1)
{
LastFName = nameList[i, k];
continue;
}
else
{
LastFName = nameList[i, k];
}
int bFlag=IsVisible(nameList, k, i, LastFName);
switch (bFlag)
{
case 0:
break;
case 1:
RowSpan = GetSpanRowCount(nameList,row, k, i);
ColSpan = GetSpanColCount(nameList,row,col, k, i);
TableHeaderCell tc = new TableHeaderCell();
tc.BackColor = System.Drawing.Color.FromName("#003399");
tc.Font.Bold = true;
tc.ForeColor = System.Drawing.Color.FromName("#CCCCFF");
tcl.Add(tc);//添加表头控件
tcl[tcl.Count - 1].RowSpan = RowSpan;
tcl[tcl.Count - 1].ColumnSpan = ColSpan;
tcl[tcl.Count - 1].HorizontalAlign = HorizontalAlign.Center;
tcl[tcl.Count - 1].Text = LastFName;
break;
case -1:
string[] EndColName = LastFName.Split(new char[] { ',' });
foreach(string eName in EndColName){
TableHeaderCell tc1 = new TableHeaderCell();
tc1.BackColor = System.Drawing.Color.FromName("#003399");
tc1.ForeColor = System.Drawing.Color.FromName("#CCCCFF");
tc1.Font.Bold = true;
tcl.Add(tc1);//添加表头控件
tcl[tcl.Count - 1].HorizontalAlign = HorizontalAlign.Center;
tcl[tcl.Count - 1].Text = eName;
}
break;
}
}
if (k != row-1)
{//不是起始行,加入新行标签
tcl[tcl.Count - 1].Text = tcl[tcl.Count - 1].Text+"</th></tr><tr>";
}
}
}
/**//// <summary>
/// 如果上一行已经输出和当前内容相同的列头,则不显示
/// </summary>
/// <param name="ColumnList">表头集合</param>
/// <param name="rowIndex">行索引</param>
/// <param name="colIndex">列索引</param>
/// <returns>1:显示,-1:含','分隔符,0:不显示</returns>
private int IsVisible(string[,] ColumnList,int rowIndex, int colIndex,string CurrName)
{
if (rowIndex!=0){
if (ColumnList[colIndex,rowIndex-1]==CurrName){
return 0;
}else{
if (ColumnList[colIndex, rowIndex].Contains(","))
{
return -1;
}else{
return 1;
}
}
}
return 1;
}
/**//// <summary>
/// 取得和当前索引行及列对应的下级的内容所跨的行数
/// </summary>
/// <param name="ColumnList">表头集合</param>
/// <param name="row">行数</param>
/// <param name="rowIndex">行索引</param>
/// <param name="colIndex">列索引</param>
/// <returns>行数</returns>
private int GetSpanRowCount(string[,] ColumnList, int row,int rowIndex, int colIndex)
{
string LastName = "";
int RowSpan = 1;
for (int k = rowIndex; k < row; k++)
{
if (ColumnList[colIndex,k]==LastName){
RowSpan++;
}else{
LastName = ColumnList[colIndex, k];
}
}
return RowSpan;
}
/**//// <summary>
/// 取得和当前索引行及列对应的下级的内容所跨的列数
/// </summary>
/// <param name="ColumnList">表头集合</param>
/// <param name="row">行数</param>
/// <param name="col">列数</param>
/// <param name="rowIndex">行索引</param>
/// <param name="colIndex">列索引</param>
/// <returns>列数</returns>
private int GetSpanColCount(string[,] ColumnList,int row, int col,int rowIndex, int colIndex){
string LastName = ColumnList[colIndex, rowIndex] ;
int ColSpan = ColumnList[colIndex, row-1].Split(new char[] { ',' }).Length;
ColSpan = ColSpan == 1 ? 0 : ColSpan;
for(int i=colIndex+1;i<col;i++){
if (ColumnList[i, rowIndex] == LastName)
{
ColSpan += ColumnList[i, row - 1].Split(new char[] { ',' }).Length;
}
else
{
LastName = ColumnList[i, rowIndex];
break;
}
}
return ColSpan;
}
/**//// <summary>
/// 将已定义的表头保存到数组
/// </summary>
/// <param name="newHeaders">新表头</param>
/// <param name="row">行数</param>
/// <param name="col">列数</param>
/// <returns>表头数组</returns>
private string[,] ConvertList(string newHeaders, int row, int col)
{
string[] ColumnNames = newHeaders.Split(new char[] { '#' });
string[,] news = new string[col, row];
string Name = "";
for (int i = 0; i < col; i++)
{
string[] CurrColNames = ColumnNames[i].ToString().Split(new char[] { ' ' });
for (int k = 0; k < row; k++)
{
if (CurrColNames.Length - 1 >= k)
{
if (CurrColNames[k].Contains(","))
{
if (CurrColNames.Length != row)
{
if (Name == "")
{
news[i, k] = news[i, k - 1];
Name = CurrColNames[k].ToString();
}
else
{
news[i, k + 1] = Name;
Name = "";
}
}else{
news[i, k] = CurrColNames[k].ToString();
}
}else{
news[i, k] = CurrColNames[k].ToString();
}
}else{
if (Name == "")
{
news[i, k] = news[i, k - 1];
}else{
news[i, k] = Name;
Name = "";
}
}
}
}
return news;
}
/**//// <summary>
/// 取得复合表头的行数
/// </summary>
/// <param name="newHeaders">新表头</param>
/// <returns>行数</returns>
private int GetRowCount(string newHeaders)
{
string[] ColumnNames = newHeaders.Split(new char[] { '#' });
int Count = 0;
foreach(string name in ColumnNames){
int TempCount = name.Split(new char[] { ' ' }).Length;
if (TempCount > Count)
Count = TempCount;
}
return Count;
}
/**//// <summary>
/// 取得复合表头的列数
/// </summary>
/// <param name="newHeaders">新表头</param>
/// <returns>列数</returns>
private int GetColCount(string newHeaders){
return newHeaders.Split(new char[] { '#' }).Length;
}
}
GridView和CheckBox结合实现可选择删除
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
<style type="text/css">
.style1
{
width: 100%;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div style="text-align: center; height: 640px">
<table class="style1">
<tr>
<td>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px"
CellPadding="3" GridLines="Horizontal">
<FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
<RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
<Columns>
<asp:TemplateField HeaderText="选择">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="id" HeaderText="编号" />
<asp:BoundField DataField="name" HeaderText="姓名" />
<asp:BoundField DataField="sex" HeaderText="性别" />
<asp:BoundField DataField="department" HeaderText="专业" />
<asp:BoundField DataField="grade" HeaderText="年级" />
<asp:CommandField ShowDeleteButton="True" />
</Columns>
<PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
<AlternatingRowStyle BackColor="#F7F7F7" />
</asp:GridView>
</td>
<td colspan="2">
</td>
</tr>
<tr>
<td align="center" >
<asp:CheckBox ID="CheckBox2" runat="server" Text="全选"
oncheckedchanged="CheckBox2_CheckedChanged" AutoPostBack="True" />
<asp:Button ID="Button2" runat="server" Text="取消" onclick="Button2_Click" />
<asp:Button ID="Button3" runat="server" Text="删除" onclick="Button3_Click" />
</td>
<td >
</td>
<td>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Data.SqlClient;
public partial class Default3 : System.Web.UI.Page

{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Bind();
}
}
private void Bind()
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Personal"].ConnectionString);
conn.Open();
SqlDataAdapter adp = new SqlDataAdapter("select * from information", conn);
DataSet dataset = new DataSet();
adp.Fill(dataset, "information");
conn.Close();
GridView1.DataSource = dataset;
GridView1.DataKeyNames = new String[]
{ "id" };
GridView1.DataBind();
}
protected void CheckBox2_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (CheckBox2.Checked == true)
{
cbox.Checked = true;
}
else
{
cbox.Checked = false;
}
}
}
protected void Button2_Click(object sender, EventArgs e)
{
CheckBox2.Checked = false;
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
cbox.Checked = false;
}
}
protected void Button3_Click(object sender, EventArgs e)
{
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked == true)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Personal"].ConnectionString);
SqlCommand comm = new SqlCommand("delete from information where id='" + GridView1.DataKeys[i].Value + "'", conn);
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
}
}
Bind();
}
}
gridview与detailsview联合多主键无法查找问题
這個問題也困惱了我許久, 因為很多 Table 的 Primary Key 並非只有設定一個欄位, 使用複合 Key 的狀況非常多. 最近從其他網站討論區有找到一個解決方法. 我測試了之後可以 Work了. 茲將做法描述如下, 以供有此相同問題的人參考. 謝謝!
Table 之 PK 為 KMTYPE + EFFYY + EFFMM
1. SqlDataSource1 之 SelectCommand 如下:千万注意,此处的sqldatasource1为detailsview对应的数据源
SelectCommand="SELECT * FROM [Table] WHERE (([KMTYPE] = @KMTYPE) AND ([EFFYY] = @EFFYY) AND ([EFFMM] = @EFFMM))"
原先之 SelectParameters 為指到 GridView1 之 ControlParameter, 屬性為 SelectedValue.
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" Name="KMTYPE" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="GridView1" Name="EFFYY" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="GridView1" Name="EFFMM" PropertyName="SelectedValue" Type="String" />
</SelectParameters>
請將上述 SelectParameters 替換成下列句子:
<SelectParameters>
<asp:Parameter Name="KMTYPE" Type="String" />
<asp:Parameter Name="EFFYY" Type="String" />
<asp:Parameter Name="EFFMM" Type="String" />
</SelectParameters>
最後於 GridView1_SelectedIndexChanged 中加入 SelectParameters 的 DefaultValue 即可取得正確的值了.
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataSource1.SelectParameters[0].DefaultValue = GridView1.DataKeys[GridView1.SelectedIndex][0].ToString();
SqlDataSource1.SelectParameters[1].DefaultValue = GridView1.DataKeys[GridView1.SelectedIndex][1].ToString();
SqlDataSource1.SelectParameters[2].DefaultValue = GridView1.DataKeys[GridView1.SelectedIndex][2].ToString();
}
經過上述修改之後就算是複合Key 的 GridView 當按了 "選取" 按鈕之後, 也能讓 DetailsView 顯示出正確的資料了.
25岁男人应该争取的生活
25岁,对于一个男人来讲是什么样的年龄呢?经历过一些事情,但是并没有变得世故圆滑;爱过一些人,但是心灵并没有找到家的感觉,总是觉得也许会遇到更好的;受过一些伤害,但是并没有对美好的事物退却。25岁,也许就是这么一个过渡的年龄,就好像一堆豆腐渣,很快地他就要变成臭豆腐了。
一个25岁的男人应该拥有什么样的生活呢?每个25岁的男人都会不一样。但是,下面的40条,大家就抱着一种“有则加勉,无则努力”的心态,看一看,想一想。25岁的你,在一个什么样的生活里?
1、25岁的男人存折至少要拥有6位数。
我目前的存折在2位数到4位数之间徘徊
2、必须拥有一套商品房,房子必须有你的名字。
现在很多女人都会觉得房子比男朋友,更能带来安全感。
3、浴室须拥有名牌不同功效的护肤品。
肥皂算不算?
4、不定期的购买各类名牌装备,知道装备的潮流资讯。
我就几双仿制NIKE鞋
5、须拥有各类名牌子的香水,不少于10种。
记得某个很有名的男人说过,不用香水的男人是没有前途的。一个朋友说,男人要保养的不仅是自己的身材,更要保养对女人的兴趣。不仅要对女人有兴趣,更要让女人对你有兴趣,而香水,就起到了一种催化剂的作用。不过,10种香水,对于很多男人来说,好像夸张了一点。
6、拥有一辆小汽车(QQ不算在内)
我拥有一辆永久牌自行车
7、有一个很爱很爱你的人
8、养一只可爱的小宠物(前提是,你必须不讨厌动物)
我喜欢动物,特别喜欢虐待动物
9、有自己的事业
我现在的主要工作是 找工作。
10、会品赏红酒
我只知道 甘红+可乐是俗人的喝法,所有我只用 甘红+雪碧。
11、习惯去星巴克和朋友聊天(但无须喝那些毫无特色的咖啡)
如果可以不用点咖啡就能免费上网,我就去
12、习惯去电影院欣赏电影
我连5元的盗版dvd都不买,为什么还有男人不会用BT呢?
13、每星期必须做一次手部护理
我每星期都剪手指甲的
14、每2星期必须做一次脚部护理
我每2星期都剪脚趾甲的
15、每星期必须做一次脸部护理(没时间可2星期做一次)
我每天都洗脸的,不知道算不算护理?
16、每天晚上必须喝一瓶牛奶
我不但喝牛奶,还经常吃牛肉
17、每天必须吃一种以上的健康药丸
是药三分毒
18、必须注重自己的衣着和仪态
让别人去注意我的衣着就可以了,我一般不注意自己的衣着的
19、头发必须保持有香味
现在的洗发液一般都有香味的,而且还很难洗掉
20、除了自己的GF外,至少还有一个深爱你的人(但你可以不爱他,可以忽略过去的)
肯定有,而且还有很多人深爱我,只是我还不知道而已。
21、必须看大量的报纸和杂志(包括政治新闻)
22、虽然你不喜欢的,但至少应该去了解一下有关车的知识
我经常自己修车的,自行车
23、要注意自己的形态身段,并开始注重胸肌和三角肌
我一直希望拥有施瓦星格106cm的胸围
24、要有超过2个以上真心的好朋友
25、在朋友面前不要炫耀和自以为事(这样是很令人反感的)
我很低调
26、绝对不可以说脏话(这是没修养的表现)
我不但说,还喜欢用各国语言说
27、要拥有几个值得信赖的好友
28、和朋友出去吃饭,不要因为自己是男孩,就主动埋单,觉得你请别人是应该的(请记着)
一贯如此
29、学会聆听别人的意见
30、多点和家人吃饭、聊天
31、一定要知道社交礼仪
32、至少要去过SPA,享受过真正的SPA
33、至少要到过其他国家(包括阿富汗也算)
34、至少有一个和你暧昧的异性朋友(没有性关系的那种)
35、认识一些年纪比你大的朋友,他们的经验会对你有帮助
36、和上司、下属的关系处理好
37、须注重物质的享受
会享受的男人才会生活。男人,注重物质没有错。不知道大家是不是会有一样的感受,在某种意义上,物质,还是一个很好的心理医生。
38,须有爱心和同情心
39,不要对爱情再抱有理想主义的幻想
已经不是小男生了,风花雪月的爱情故事,留给情窦初开的男孩去梦想吧。25岁的男人,应该为自己多考虑,为自己的生活做打算了。也许是太世故了,但是,这就是生活,这就是成长的代价。
40,是时候开始正视和考虑结婚、生BB的问题
萝莉比御姐好的若干理由~~~~我最阴暗
1-诱拐一个小萝莉不用花言巧语,只需要一支棒棒糖;
2-LOLI好~LOLI好~~娇小无力,易推倒;
3-小罗莉春芽初发、娇嫩欲滴、香甜可口、引人遐想;
4-人萌声好,可调教;
5-小萝莉蜜汁~酸酸甜甜~酥软可口;
6-小萝莉会主动跟你抱抱;
7-虽然“大哥哥”这个词谁都会说,但小萝莉说出来就是不一样;
8-陪小萝莉睡觉不需要吃伟哥;
9-小萝莉只计较你对她好不好,而不是月薪多少;
10-小萝莉可以一次拥有多个,而不怕被小萝莉打耳光;
11-保固期长,还可顺道玩御姐育成计划;
12-不必担心不在家时小萝莉会找男人幽会,说不定还可以给你带来更多的萝莉
旅行的意义
他终于记起来这是许多天以后他第一次照镜子,他看到自己的胡子再一次的茂盛着。他发呆,他盯着镜子里的自己,直到无聊到盯着自己的单眼皮,想把它盯成双的。他觉得自己无聊。
要是在古代,他会认识她么?再早的古代,那个离开就意味着离开,没有回来和重逢的离开的时代。一座城市就是一个国家,绵延的城墙之外就是公海一样浩荡的天地的时代。他们会相识么?也许会吧,在所有人都不相识的时候,他也许会问只有他感兴趣的问题,她会微笑,他们会这样认识。在从一个城市到了另外一个城市之后。
他会怀念那座城市的,也许是因为她。他幻想着那些像黑色芝麻撒在大地上的城市平和的坐落相连。出城,然后像着一个方向走,总会再见到那座已经开始熟悉的城市。然后和她讲那些用了一路的时间想出来的笑话。他见过她的哭泣,他总是想送给她自己的肩膀和胸膛,至少一个让人温暖的拥抱。他总是这样,后知后觉。他说过自己总是想的多过做的,他怀念的总是那些可以聊到天亮的夜晚,他总是期望有一个新的笑话可以描述他的心情,可是没有。所以他总是在被自己的笑话逗乐之后哭泣。他渐渐习惯遥望,她的背影,她的种种,他也渐渐习惯怀念。
有人对他说,他愿意为一棵柳树改变自己的一切,重新定义幸福。他对那个人说,别抱期待,过去的太多,你忘不掉。又有个人对他说,他感到自己只是付出,得到的却太少,他对那个人说,你需要对得起的只有自己。他不等第三个人的到来,离开了。他忘不掉的城市总是太多,他自己的言语却会反噬。
他突然想喝酒,在盯了许久的镜子,并且不打算刮掉胡子之后。却只拿着没来得及丢掉的空瓶子发呆。他更喜欢的是拿着酒瓶的充盈的触感。不被怀念的东西在自己的生命里出现过么?突然的疑问在心头掠过,他总是说自己毒舌,他知道有些东西是渐渐不见的。他想起来刚刚看过的小说,有个人喜欢的东西很简单,甚至到他不是人的时候,他爱的人能知道是他,就因为他的单纯。
单纯?那不就是傻么,他听她的故事的时候这么想过。可是现在他怀念单纯。
他想到关于快慢的虚无比较,他想时间不在他这边,他定下的时限是从来没有到来过的。他想念一个远方的朋友,他用一个疑问句当作了问候,收到的是个陈述句,隐藏着疑问。他知道,他们生命的轨道开始不一样了,他有点高兴,却也悲伤。也许这悲伤,也是他决定的原因,离开的原因。
“他走过了许多的美景……”,打开收音机,他听到了她唱过的歌。他也想歌唱了,他开始怀念一次旅行。不,许多次旅行凑成的一次,他头脑里充斥着向前的脚步的特写,还有关于怀念的思念。
从一座城市到一座城市,路上的是旅行,前半段用来无意识的憧憬,后半段用来有意识的怀念。他想尝试着怀念未来,可是他没有为了自由的自由。
“如果我们的生活再有交集,我一定允许自己爱上你”,他对她说了,在他们相拥时她的耳边。他给了自己第一次的尝试,关于不确定能否抓住的东西。
于是他败给了时间。
浮云上的彩虹的猫
槐未在听
从前,在最北的不冻港的北边有一个非常小的渔村,有一个青年叫做槐未,这天下了大雾,槐未不能出海了,他在院子里修着渔网。直到白色的浓雾里出现了一个更白的身影。
好客的槐未用热腾腾的鱼汤招待了他,好奇的槐未请求那个旅人给自己讲他不知道的世界。旅人微笑着答应了。他告诉槐未,他答应了,而且他愿意给槐未一直讲下去,直到槐未不想听为止,前提是槐未照顾他的饮食起居,年轻的槐未答应了,于是他们两个人成了这个故事的主角。而且没有人知道这个故事的结尾。
伟民说他不知道接着该写什么了,伟民说他打算坚持写下一个月,伟民说他要给我介绍个女朋友,伟民想问我都要写什么,我答应了。于是我突然想起了这个自己曾经想好了开头的故事。我当然不敢拥有“指点”这种东西,也好,说说自己都写过什么吧,我知道伟民你会看到,我也知道伟民你能明白。
在我的故事的最开头,不过是没有目的的划拉,也是不知道该写什么,于是也是强迫,有定量的,你可以从我的文章分类看出来,一个叫做“也算日记”,一个叫做“转载的”,没了,就这么简单。那日记也确实是日记。直到有一天,我确定了这么一个问题:我向一直写下去,我想写一些不一样的。那个时候,我突然想起了孟洁看完《人工智能》之后闪着泪花的眼睛,他说他想哭。于是我决定了,我想把影评观后坚持下来,现在看来,也有点成果,接近30篇,当然,电影看的比这个多,可是想写的差不多都写了。人是容易形成习惯的,看完一个电影开始习惯了多多少少的一千来字,那么一本书呢,一次失眠呢,一次想念呢,一首歌呢,一次聊天呢,一个电话呢,一个眼神呢,一次醒来的发呆呢。好了,这就是我写东西的由头了。不过形式不同罢了,有的人写的是诗,有的人写的是小说,也有的人的东西可以叫做散文。也许你会发现,我写的东西里出现过许多次的“你”,好吧,我承认,那是深夜的想念,看看时间,也都是凌晨,多少透着点月亮的冷。也许你看到了别人的问题,“为什么总是在欢乐里找到悲伤”,这也是我不愿和真正的亲人朋友喝酒的原因,在我眼里,太过极至的纵情,本身就是种丝丝的悲伤。也许你还会看到个问题,“为什么叫不落客,为什么叫飞匙,为什么不落下来休息”,其实这是最超出我能力的问题,我也不知道为什么叫了这样的名字。
回到开头的那个故事,槐未想听的,是一个陌生人的故事,也就是一个陌生人的世界。其实两者并不相等,你知道的,一个人有两个故事,一个给别人听的,一个留给自己的。对于我这种看你博客的人来说,故事或者世界来的却不重要了,透过故事可以管窥一个世界,故事却比世界来的也更吸引人,故事也都是来自于你的世界。罗嗦了,说的白一点,我想知道你的喜怒哀乐。
就像另外一个问题,“为什么和你本人不一样”,对了,故事和世界的区别,现实和思考的区别。这就是另外一个问题了。朋友相见,更多的是快乐和喧嚣,另外的你呢,为了情或事可以流泪的你呢。博客,说白了,一个可以给你宣泄的口子,目的不在于让别人的看与不看,而在于自己想法的反映,现实给的机会太少,自己何不来创造个机会。
嗯,希望看到坚持,一个机会,一个可以成为故事的故事。
我叫奥尔达斯
我叫奥尔达斯,21岁,西班牙人,英甲联赛阿森纳队的前锋。
本来我们队是那种上不去,下不来的队,冲超没什么希望,但是今年管理层大规模的人员更换,从主席到教练,我知道,队伍要有变化了,可是我也知道,球队的所有变化都要靠我们这些原有队员的表现,去挣得引进队员的资金。
从青年队到现在,仅有的朋友说我的脾气没有过一点变化,说我根本不像一个沐浴过伊里亚半岛阳光的西班牙人。我不爱笑,不爱开玩笑,从不喝酒抽烟,从不出入声色场所。那是因为我知道,一个最优秀的射手,注定是个孤单的人,一个因为孤单才在球场上奔跑的人,所有的激情和渴望,对于一个前锋来说,应该让进球去替我释放。也许是孤单成就了我,也许是我成就了孤单。也许是冷静让我更加擅长于分析自己,作为一个前锋,我有着良好的进攻欲望,还算准确的射门精度和力量,1米81的身高加上良好的意识,让我的头球也很出色。可是我也知道我所欠缺的是速度,而且我也并不是天生的射手,我拥有的一切,不过是一个普通球员努力的结果。
新教练和队员见面会上,新来的主教练没有给我们留面子,他批评了一切可以批评的地方,从场上的奔跑到对待训练的态度,他队我们说,他希望的球队风格是快速的攻防转换,是拼尽全力的奔跑,他要我们用速度撕开对手的防守,用速度冲垮对手的意志。他对主力阵容做了调整,果然,速度不突出的我被放在了替补位置,442的阵形里,两名队里速度最快的前锋,奥托姆和莱恩托斯,别人说他们具有艾托奥的素质,可是我知道,他们老了,一个31,一个34,密集的联赛中间,他们的身体吃不消。其他位置都是差不多,我们队的人员要么打了低级联赛许多年的30多岁老队员,要么像我一样刚刚从青年队上来的年轻人。见面会结束后我走到和我一样大的德国前锋哈姆森面前,他也为因为速度丢掉的主力位置懊恼,我拍了拍他的肩膀,告诉他我的想法,他笑了,起身和我走向训练场。
联赛开始了,信心满满的队伍,却被两场0:2压的抬不起头,教练没有说什么,可我知道,要有变化发生了。第三场,35岁的莱恩托斯体力不足以撑完一场了,我终于得到了上场机会。可是不出色的速度让我成了对方后卫眼里的鱼腩,苦苦的熬过了上半场,中场休息的时候,教练说:“奥托姆稍微后撤,靠速度扰乱对手,奥尔达斯在禁区前沿活动,看好机会强点,埃思皮马斯和西梅莱斯,你们两个坚决下底,争取传中,另外两个中场加强美莱达和度度加强就地反抢,努力把球控制在自己脚下。”我听后盯着教练许久,我知道,他改变战术了,他要我充当进球角色了。下半场开始,我们的变化让对方措手不及,31岁的奥托姆没有怨言的扮演着疑兵,35岁的美莱达用漂亮的盘带控制球,意大利的小个子度度努力奔跑,为边路分球,队长艾斯皮马斯在右路,西梅莱斯在左路,充分发挥自己的速度优势,两次抢点和一次头球之后,埃斯皮马斯又一次形成右路突破,一个漂亮的传中球,我高高跃起,用尽全力把球顶向对方球门。时间仿佛静止了,仿佛略去了大段的过程,盯着皮球的我只看到了皮球在球网上顶出的图案。海菲尔德沸腾了,所有人都向我跑来,1:0,新阿森纳第一个进球,我却呆呆的看着场外大屏幕不同角度的慢镜头,体味着刚才那如梦般的过程,直到终场哨声响起,我知道,我们赢了,因为我的进球!教练也笑了,他发现了改造球队的方法。
从这场以后,我和更擅长头球的哈姆森轮流担任中锋,两名速度形前锋靠速度冲击,进入冬歇期之前,我们10胜5负,积分榜第三,第一次看到了冲击英超的希望。转会期开始,教练用不多的经费买来一个阿根廷中场德尔加多,替代体能不能保证的美莱达,下半个赛季继续贯彻上个赛季的战术,终于,我们取得英甲第二,成功升入英超,我也以11个进球排在射手榜第二。
莱恩托斯退役了,告别酒会上,莱恩托斯哭了,一个来自非洲草原的男人哭了,他感谢了所有的人,也祝我们在英超继续创造辉煌。俱乐部里买来了美国国脚多诺万,我知道,这是我们起飞的开始
新赛季很快到来,第一场对手是托特纳姆热刺,0:3,我们输了,对手右前卫伦农彻底打垮了西梅莱斯和瓦莱尼把守的左翼,赛后的沉默,让我意识到我们必须更加努力。教练告诉我们,作为一个经济不太好得俱乐部,我们没有钱去买来大牌球星,必须依靠我们自己努力,技术不行拼整体,防守不行拼进攻,教练把德尔加多调到影前锋位置,全力进攻,用以弥补防守上的劣势。曼联,切尔西,利物浦,纽卡斯尔,这些豪门也不能轻取我们,甚至我们还可以获胜。教练知道他的战术正确了,我们知道努力得到回报了。又是一个冬歇期,主席花了大价钱改造球队,买来瓦尔莱尼替代36岁的埃斯皮马斯,买来德国国脚德默萨克充当防守领袖,买来技术全面的马里奥坐镇左路,随之而来的庞大的经济负担让我们必须更多的赢球,因为主席押上了球队的命运。从胜利到胜利,适应了英超节奏的我们凯歌高奏,我也在不断成长,有球探开始替别的球队联系我了,甚至其他联赛的豪门,可是我不愿离开,这里有我和球队一起奋斗的历史,由我成长的足迹,我依然兢兢业业的踢着球。我的抢点能力更加突出了,因为我很高的进球效率,多诺万这个国脚射手甚至成了联赛助攻第一。30轮联赛之后,我们竟然排在第三,仅仅落后切尔西和曼联,获得了下赛季欧冠联赛的资格。所有的媒体都报道着,可就在这个时候,主教练把我叫到他的房间。
他对我说,法甲的里尔队愿意用我交换亨利,我知道那是主教练最中意的前锋,可是我真的不想离开。教练说,其实我们可以直接把亨利买来,毕竟他已经31岁,而且主席愿意出高价,可那样必然使年轻的我,资历尚浅的我得不到上场机会,而里尔队答应给我一个主力位置,教练组平衡许久,决定出于对我这个伴随着球队同风雨的功臣负责的考虑,准备把我交换出去,于是我同意了。
到了法国的我,听说更加年轻,更加注重进攻的阿森纳打起了352,买来了许多23年龄段的小将,都非常优秀,像德国的施维因施泰格,西班牙的法布雷加斯,甚至仅仅17岁,却非常优秀的右边锋法西耶夫。我知道,阿森纳的明天是美好的。而我的生活环境,从英语换成了法语,但我却没有变化,当里尔队的球迷和当地媒体关注着我这个英超年轻的最佳射手的时候,我依然独来独往,少言寡语。
新的赛季开始了,看着红白的队服变成黄色,听着漫耳法语的加油声,我看了眼体育场耀眼的灯光,我告诉自己,一个射手,命中注定的孤单。我走到球场中圈,盯着脚下的足球,等着开场的哨音。
纪念我的实况足球,纪念我最不忍心卖掉的前锋奥斯。
春节,那就是我成为变形金刚的理由
要是我在……
话说这沧海横流才能尽显英雄本色,话虽不假,可惜,往来5000多年,英雄的个数用上手脚,也是够数了,论坛上人们讨论自己的大学专业在古代能干嘛,不用想了,我的专业还不如个养猪的,所以我就是个平民了,想想从古至今我都能干个啥。
要是我在黄帝的时候嘛,肯定是跟着蚩尤混的了,人家黄帝啊,炎帝什么的都在山西、河南混,到不了这,我也就只能跟着蚩尤了,也算本土部队了。我又不能吃沙吃铁的,肯定不是精锐,就是那种平常种粮,战时被召集打铁跟车,实在没人了发个棍子上战场的主。身体条件不好啊,都怪我妈,没给我生个带角的脑袋,上了战场也是炮灰,生生消耗黄帝他们有生力量的角色,不过考虑到传说史实,在黄帝那个家伙没有找到什么“应龙”帮忙的时候蚩尤的部队是很厉害的,没怎么打败仗。可能我不是炮灰,考虑到我的身体条件,最有可能的就是打扫战场了,嗯,就是。黄帝得胜了,我肯定没有悲伤,考虑到我对中华文明的进步造成的阻碍也不大,估计被教育改造之后放回家继续种田打猎了,不过税可能比较高,再没准因为长的对不起中华文明,发配给哪位英雄做了奴隶了,还没准做了殉葬了。哎!可恶的奴隶社会啊!
要是我在尧舜禹的时候嘛,尧舜不说了,都是好时候啊,老老实实的种田打猎,被野猪撞死可能就是最神奇的经历了。大禹的时候发大水了,咱这只有条可爱的拒马河,治理起来肯定没有黄赌毒难,种田打猎,这是咱一直到东周初年不变的主题啊。
到了东周就不一样了,邻居的大哥大爷们开始讨论新来的国君,听说是个给周天子放马的人,咱这块地方也改名叫了“赵”,咱就是赵国的人了,赵武灵王的时候搞什么胡服骑射,以我对马的喜爱,加上我这能考上大学的脑袋,就算混不上什么伍长,什长之类,小兵应该没什么问题吧。还顺便学会了拉风无比的射箭,没准那时候进了骑射的队伍根今天考上大学差不多,那绝对是光耀我们种了几百年地的家族门楣的事情啊。到了后来,咱们这是“督亢”之地,老老实实的替老不死的廉颇种地,也是好事,就算是廉颇得家兵,没准也因为他兵权的丢失避免了被秦国的那个叫白起的本家坑杀的命运。在这个女人随便休老公的年代,没准我的经历更加丰富多彩,没准哪天的打油诗被哪个无聊的小官写进《诗经》,没准被哪家漂亮女儿看上了,没准跟随了那些“子”们,没准成了颜回的同学,苏秦的师弟,也没准是孔子的车把式,替商秧搬木头的傻力气。
要是我在统一了六合的秦国,这山高皇帝远的地方,算了吧,继续种地,不过也是相当的有可能被拉去修了长城,估计那时候很瘦,纯粹累的,等到秦末暴民造反的时候,我一定是在渔阳戍边,嘴里骂着那队有着“陈胜、吴广”的本该到来的队伍,要不是他们我和至于被拉来守城受罪。战火比较少,特别是已经封建社会了,被拉去殉葬的机会是没有了,可惜这汉朝比较讲究出身,反正我没有听说过什么姓白的伟大家族,种地守边估计是贯穿汉朝这几百年的主要工作了,卫青、霍去病的队伍里河北人估计都没有,司马迁这个远在西安的太监我也见不着,就算我像现在一样溜达到了西安,当官还是比较难的,哎,这社会稳定有什么好的。
于是上天听到了我的呼唤,三国这个伟大的时代到了。在这个地界,没准我跟卢植的关系比刘大耳好,没准我认识可爱的公孙小白马,没准我比草鞋刘更早看到招兵榜文,可惜没有张飞个傻大哥请客喝酒,也没有遇见杀人犯关。加上我对邪教的比较厌恶,于是我老老实实的跟了刘大耳当民兵,跟黄巾暴民们打架而已,其实当兵挺简单,我一般都跟张飞混,刘备比较爱丢手下,关羽这个人比较扯淡,还是张飞好,特别是这个打仗竟然主要靠单挑的牛B时代,只要离他喝酒的时候远一点就好了。跟着刘备混不久,我有这个伟大的觉悟,刘大耳连老婆都经常丢,何况手下乎?他们跑到南方去,跑到四川去就不归我管了,接着我的人生理想没准是给公孙小白马当“白马义从”,顺便认识认识定州赵子龙,直到被袁绍打败,接着被曹操打败,接着跟着曹操打乌桓,可惜咱不是什么精锐部队,虎豹骑不用说,什么青州兵之类的也属不归组织。其实最大的可能还是替魏朝太祖种地,替他修养生息。也没准我去当个野兵什么的,跟着廖化投了关羽,嗯,在曹丞相那当个谋士,认识认识小郭嘉,好歹咱也算个幽并游侠儿啊,努力努力跟小甘兴霸排名差不多也就知足了吧。咱这家乡战乱太少,英雄事迹要靠自己去寻找,使劲的往什么荆州、赤壁、长沙、汉中的跑,没准死于诸葛亮的火,黄忠的箭,马超的蹄子下,可怜,也没准随便用枪一捅,用弓一射,灭掉了历史长河中的几颗星星。到了征战的人们都不被我看作英雄的时候,我就去帮陈寿什么的写写史书,或者回家种地。
三国之后西东晋,南北朝,老家附近总是出现穿着汉人衣服的少数民族了,他们信任汉人的,没准我能混个小官,不信任的,我就去种地呗,到了北魏,从家往南跑5里地去认识认识郦道元小朋友,趁他没去山东见他老爸之前,胡侃八吹一番。在家种地的日子过的快,谁知道他们打仗为什么,接着就到了隋朝。
要是我在隋朝,我就觉得当个民夫的可能性最大,去修个大运河啊,帮忙看看争高丽的兵营啊,不过这也是个好时候啊,能高考啦,呃,不对,是有了科举考试了,这是后咱可是终于有可能投身个仕途什么的了。
到了唐朝,咱这是个藩镇,好像还是安禄山的地盘,没事,不太影响,没准是个卢照邻的同学,一起做个诗啥的,跟着军队西征的机会也不大,去了没准也就个参军什么的小小官,还有极大的可能就是个兵,不是明光铠骑兵,不是陌刀队精兵,就是个长矛兵,就怕弓箭手的那种凑够什么“几十万大军”的基础兵种。那时候不分文理,就是个投文投戎的区别,综合起来看,没准我投文的可能比较大,比较大。
要是我在五代十国,我绝对应该英明的跟着后周混,跟着小赵匡胤混,帮他黄袍加身,被他释了兵权,想大了,没准也就接着种地,接着当个长矛兵,这幽云十六州毕竟少数民族掌权啊。没准在蒙古人的驱使下在襄阳城下射过箭呢。到了元朝,那就可怜了,虽然在首都边上,可咱连色目人都不是,一个标准下贱的汉民,老老实实的种田吧,啥都别想,过年的时候看出戏拿就是最大的享受了。
到了明朝,嗯,应该是朱棣的手下吧,毕竟地方属于,在他的命令下多了他侄子的政权,接着,马不停蹄的在他的政和太监手下出了海,过了十万八千里,染上疟疾,死在个马达加斯加,挖靠,过了好几千年,就这事想起来比较奇妙。如果没有呢,还是当民夫的可能性大,修长城啊,修故宫啊,修十三陵啊,都是很有可能的,也没准经过几千年的累积,终于混成了个地主,看着长工们干活傻笑。
要是我在清朝,靠,清朝,宁愿老实当农民,种它十二朝的地,看着鞑子胡闹,完后出钱给革命党造反。
五千年就是这么简单?不愧是农业国家啊,好像有三千年种地,一千五百年打仗,当最低等的长矛兵,还有五百年当民夫,修筑伟大的古代文明。
哦,不造反行么?
他们说,这叫女性视角
他们说,这叫女性视角
铜铃锦帆
有点奇怪的题目,在看完三国演义的两天之后的又一个凌晨三点。
放假以来,生活简单的可爱。每天睡到自然醒,或是因为饿,或是因为热。每天凌晨才睡,只是因为困。电视前呆坐,看完所有没有仔细看过的《武林外传》。其他时间,都在床上,或趴,或仰,或侧,都是一口气三四回的三国,间或着多少有点累的小寐。只重数量,忽略质量的终于看完,发现许久没有洗澡了。却依然顽强的在电视前又呆坐了两天。
是谁?《三国演义》看完了谁给我的印象深刻。说来自己都有点不太相信,不是什么五虎八健,羽扇纶巾,竟然是那个叫做甘宁,字兴霸的人。
现在想来,关于甘宁的意象,首先是漫江的大雾,翻卷的江水,忽然透雾的铜铃声传来,接着看到红色的蜀锦船帆带出条楼船,船头一名少年英雄嘴角上翘的举刀微笑。说句实话,看完三国的这两天,头脑中总是这个场景浮现,朋友说有点一根筋的少年狂想了。还有就是甘宁和凌统这先敌后友的传奇故事,兴霸的一箭啊。还有他的百骑劫营,那100根白色的羽毛啊,挥绳攻城,他嘴角的笑容啊。想想当年的都督吕蒙真是幸运啊,有兴霸这么个热血激情的手下。另外具我的不怎么细心的观察,甘宁差不多是三国里面写的第一个被箭射中额头死去的大将,多少有点别扭。
其实自己还在一直揣测他死前坐在大树之下,看着满天的乌鸦的时候的心里所想。在我看来,甘宁的一生相当的充实,随便拿出一段都可以撼动世人,是什么原因让他放弃了逍遥快乐的江贼生涯,是什么让他投奔了黄祖,是什么让他又投奔了孙权,是什么又让他救了凌统,是什么又让他战功不断。临死前的时刻,他会想这些么,如果不是,他会想什么。“生年总有尽时,英雄莫死床塌”,作为个武将,甘宁的一生却算无憾,当然,在许多多少有点浪漫想法的人的脑袋里,战死沙场的确比百战百胜更加悲剧的可爱,比如我。可是他怎么回想的自己一生,在临死前的刹那。我是真心希望他只是记起了铜铃锦帆的岁月,也算个江贼的极至,也算个男人的极至。
突然想起了玩了半个学期的《三国无双》,里面也有甘宁,主要突出的是和凌统的故事变化。回想起来,却是麦城下吕蒙、陆逊在前,甘宁、凌统在后,四匹白马雪中狂奔的镜头让我有点沸腾。
吴郡甘兴霸,长江锦幔舟。酬君重知己,报友化仇雠。劫寨将轻骑。驱兵饮巨瓯。神鸦能显圣,香火永千秋。
原文诗借以怀念。
记得看完电视剧的时候,也是长气不断,感慨不已。曹操的横槊赋诗,赵云的威震长板,刘备的斩石为誓,诸葛亮写《出师表》时深陷的腮帮和紧锁的眉头,邓艾的裹毡跳崖,姜维的舍身报国。太多太多。放假在家,一遍遍的打着三国游戏,一个人一个人的用,甚至马腾、董卓、刘璋、孟获,都打通了全关。看着每次相同的通关动画,想着也许不是为了秋月春风而去饮酒,不是为了饮酒而相遇,不是为了相遇而笑谈,同样,也不是为了笑谈而慨叹牢骚。实在太多太多的让人难忘。就像练字过后的纸总是难保,就像蓑衣雨夜的偶然相遇,慨叹的都是自己曾经或者不曾经的梦。有人梦里是刘备曹操,有人是孔明赵云,有人是张角公孙瓒。
当我们由衷的崇敬,低下头的是默念祈祷;当我们由衷的叹息感慨,抬起头的是纵目仰望。也许同样许多年前的一次凌晨仰望,满天未落的繁星,一盏未灭的油灯。所以繁星是用来比喻俊杰的。这么看来,低头的纸笔和平视的屏幕本就相同,不过是时间,一个叫三更,一个叫做三点。
决定做梦,铜铃锦帆的梦。
小蛋蛋的悠长假期 5
When you say nothing at all
小蛋蛋的悠长假期 4
小蛋蛋的悠长假期 3
(三)
小蛋蛋已经不尿炕了,虽然就算尿炕的时候他也没有像电视上的小孩一样难堪过。可是他还是爱玩火,当然了,姥姥看见了一定会说:“尿炕啊!”小蛋蛋不管,他不怕姥姥的,他怕姥爷和妈妈,他们不说话,他就依然故我的玩火。其实蛋蛋最喜欢的,是用姥姥家的炉子把火钳子烧的通红,然后把这通红的火钳子放到水盆里,谁知道蛋蛋怎么想的,他就是喜欢听这一声。他幻想过自己用铁锤把直直的火钳子砸成宝剑一样,可他想到姥爷只好作罢。除了把火钳子放到水里,蛋蛋还用它去烫过可怜的老槐树,烫过夹竹桃上的蚜虫,烫过房子后面的蜘蛛网,当然还有冬天里水池子里的冰。
今天姥爷出门串门了,家里只有姥姥,蛋蛋在窗户里面看到姥爷出门,直接跑到厨房,捧着蜡烛就出来了,放到客厅里他霸占的电视机对面的写字台上。找来根火柴,把蜡烛点上。蛋蛋在自己最享受的时候,总是有许多的拍脑袋想法,他自己也不能预测下次拿些什么东西来烧烧。不过在拍脑袋之前,蛋蛋会像隔壁大姨家的猫玩弄老鼠一样,喜滋滋的看着蜡烛。地球围绕太阳一样绕着蜡烛转。蛋蛋在脑袋里给蜡烛的火苗想过无数个比喻,水滴、鸭梨、匕首、喇叭(天知道他怎么想出这个的),当然,还有火苗。好了,到了拍脑袋的时候了,蛋蛋好好的想了一遍。毛线?那个不好,有股臭臭的味道;牙签?不行,姥爷说那是剔牙的,不干净,也浪费;姥姥的发卡?上次姥姥骂了自己,算了吧;报纸?会有一滩的纸灰,会落上放火的名号;葵花籽?蛋蛋最喜欢这个,不让点蜡烛的时候,蛋蛋会抱着装瓜子盘子守着炉子,边吃边向火里扔瓜子和瓜子皮。蛋蛋知道瓜子是炒出来的,要用火,于是他幻想着自己把瓜子烤得更香更好吃。可是他总奇怪为什么自己考过的瓜子都是木炭的味道。可惜今天没有瓜子吃。蛋蛋终于想出来了,爸爸单位的小姐姐告诉过自己把玻璃放在蜡烛上,玻璃会变黑。蛋蛋当初非常佩服小姐姐的见识,他也决定要试试。
从房子后面找来片碎玻璃,蛋蛋拿着放在蜡烛的火苗上面。真的,玻璃变黑了,蛋蛋高兴,手却还捏着玻璃在烤。蛋蛋想起来电视上烧过的玻璃都会变形,蛋蛋也想让玻璃变形,他决定一直烤下去。突然玻璃变烫了,烫到蛋蛋涅不住了,玻璃掉到地上碎了,蛋蛋把手指头塞进了嘴里,跳着脚的叫着姥姥。姥姥跑到蛋蛋跟前,一眼就明白了,“让你自找,快,看看,烫坏了没有……哦,没事,让你下次再淘”,蛋蛋也知道没事,没有上次的热油烫的厉害。蛋蛋被姥姥轰到屋子外面,姥姥在屋子里收拾,蛋蛋背着左手,依然含着右手的手指在院子里转圈。“这么热的天你还玩火,也不嫌热。”蛋蛋不管,他就是爱烧东西,不分季节,何况他也分不清季节,天知道妈妈怎么知道什么时候让自己把短裤换成裤子。看着院子里的槐树,蛋蛋想也许这是好柴火,为什么爸爸从来没有砍过柴啊,姥姥说现在烧煤。煤怎么点啊,蛋蛋用火柴点过,根本就着不了,大人就是奇怪。
姥姥拿着簸箕从屋子里出来了,问了蛋蛋还疼不疼,让蛋蛋用凉水再冲冲,蛋蛋冲着凉水,冲着理直气壮地姥姥嚷:“姥姥,我饿了!”姥姥说:“还没到吃饭点呢。”蛋蛋就不停地嚷,姥姥没办法,给蛋蛋拿出蛋糕吃,蛋蛋飞快地吃完,接着跑出去玩了,关于那火,也许要在下一次停电的时候再想起来了。
小蛋蛋的悠长假期 2
小蛋蛋的悠长假期 1
(一)
小蛋蛋嘟着嘴顶在纱窗上,有点愤怒的看着窗外的大槐树,表哥正窜上窜下的辛苦着,姥爷把这个做木匠的表哥找来是为了把那太过茂盛的槐树枝杈修理掉的,虽说不是为了砍掉那比蛋蛋大无数岁的老槐树,可是蛋蛋就是不高兴,他从小的理论就是人工的不是好东西,他妈妈说
是他那不懂化学的爸爸说的,人工得不好。可是蛋蛋不管,所以他那脑袋光亮的姥爷总有的犹豫的问他的女儿,蛋蛋的妈妈,这孩子是不是在家也这么神经。从来嚷着不让他扫去冬天院子里的雪,不让他修理他的老槐树。
现在的姥爷可管不上脑门有个大包的蛋蛋,总是很疼蛋蛋的姥姥也管不上,他们都仰着头,带着微笑的看着表哥上来下去。他们怕蛋蛋碍事,把蛋蛋关在屋子里,不让出来。蛋蛋看不下电视,不想喝水,不想搜索姥爷秘密的柜子,不想偷吃姥爷的花生。就这么嘟着嘴顶在纱窗上,又不敢把气撒在纱窗上,他知道,弄出了窟窿,姥爷肯定骂,没准还打,爸爸不在,妈妈不在,姥爷最厉害的。
看到本来绿色的天空变得开始蔚蓝,听到本来嘹亮的知了开始稀疏,蛋蛋知道完了,自己的抗议又一次失败了,虽然他很奇怪于为什么连环画上的伟人们对家长的抗争都是人们的尊敬,自己为什么只能得到这种待遇。一气之下不看了,一口气跳到床上,生气的拧着姥姥的收音机,沙沙叫着的收音机抗议着,蛋蛋不管,爸爸的故事里,就是兔子也是有青蛙怕的,收音机就是青蛙了。“姥爷就是大灰狼!”蛋蛋把头埋在被子里,哼哼的叫了两声,又跳了起来,因为他想起来中午自己把一个馒头藏在了炉子里,现在应该好了,想到那烤的微黄的馒头,蛋蛋不管什么槐树了,跑到门口,冲姥姥嚷着“姥姥,姥姥,炉子里有我的馒头,给我,给我,我要看电视了。”看了眼走向厨房的姥姥,看了眼没有听见的姥爷,蛋蛋倒了杯水,打开了电视。
姥姥拿来了馒头,说“什么叫你的馒头。刚吃了饭又吃,快吃啊,让你姥爷看见揍你。”蛋蛋不耐烦的皱了皱眉,不理姥姥,姥姥也没在意,出门接着看表哥修树。蛋蛋也咧着嘴边吃馒头边看电视了。
吃完了香脆的馒头皮,姥爷姥姥和表哥也进来了,蛋蛋想起了刚才的生气,一声不吭的跑出屋子,姥姥在背后说到:“吃完了也不收拾就跑,晚上这馒头还是你的啊。”“给我妈,我要吃米饭!”装听不见是不行了,不然晚上要吃馒头了。蛋蛋跑到大槐树下,看着姥爷说的这棵有40多岁的大槐树,这棵每年春天满树白花的大槐树,这棵人家人夸的大槐树。从上到下的仔仔细细地盯了一遍,突然看到了姥姥在树后种的素子叶,想起来中午的凉菜就是那个味。他围着这几棵素子叶转了转,蹲下来跟它们打起了交道,把刚刚想起来的可怜的老槐树再一次忘记,直到妈妈下班接自己回家,爸爸回家给自己讲故事,直到第二天姥姥质问自己是不是祸害了那些素子叶。当然,第二天的事情蛋蛋不知道,和爸爸洗完澡回家后不久就困的不行的他,没机会和爸爸妈妈讲讲对大槐树一天的不平的小小愤怒。