﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-程序 人生</title><link>http://www.blogjava.net/myblogs/</link><description>程序 人生</description><language>zh-cn</language><lastBuildDate>Sun, 03 May 2026 13:12:22 GMT</lastBuildDate><pubDate>Sun, 03 May 2026 13:12:22 GMT</pubDate><ttl>60</ttl><item><title>一个老程序员的心里话说到人的心坎</title><link>http://www.blogjava.net/myblogs/archive/2006/09/07/68180.html</link><dc:creator>程序-人生</dc:creator><author>程序-人生</author><pubDate>Thu, 07 Sep 2006 01:35:00 GMT</pubDate><guid>http://www.blogjava.net/myblogs/archive/2006/09/07/68180.html</guid><wfw:comment>http://www.blogjava.net/myblogs/comments/68180.html</wfw:comment><comments>http://www.blogjava.net/myblogs/archive/2006/09/07/68180.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/myblogs/comments/commentRss/68180.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/myblogs/services/trackbacks/68180.html</trackback:ping><description><![CDATA[
		<h1 align="center">一个老程序员的心里话说到人的心坎</h1>
		<p align="left">                                                                                                            <font size="2">来源于：</font><a href="http://ronghuicoffee.spaces.msn.com/blog/cns!3DC6B634723CEECE!124.entry"><font size="2">http://ronghuicoffee.spaces.msn.com/blog/cns!3DC6B634723CEECE!124.entry</font></a><br /></p>
		<p>诸位，咱当电子工程师也是十余年了，不算有出息，环顾四周，也没有看见几个有出息的！回顾工程师生涯，感慨万千，愿意讲几句掏心窝子的话，也算给咱们师弟师妹们提个醒，希望他们比咱们强！ </p>
		<p>[1]好好规划自己的路，不要跟着感觉走！根据个人的理想决策安排，绝大部分人并不指望成为什么院士或教授，而是希望活得滋润一些，爽一些。那么，就需要慎重安排自己的轨迹。从哪个行业入手，逐渐对该行业深入了解，不要频繁跳槽，特别是不要为了一点工资而转移阵地，从长远看，这点钱根本不算什么，当你对一个行业有那么几年的体会，以后钱根本不是问题。频繁地动荡不是上策，最后你对哪个行业都没有摸透，永远是新手！　<br />　　 </p>
		<p>[2]可以做技术，切不可沉湎于技术。千万不可一门心思钻研技术！给自己很大压力，如果你的心思全部放在这上面，那么注定你将成为孔乙己一类的人物！适可而止为之，因为技术只不过是你今后前途的支柱之一，而且还不是最大的支柱，除非你只愿意到老还是个工程师！　　　 </p>
		<p>[3]不要去做技术高手，只去做综合素质高手！在企业里混，我们时常瞧不起某人，说他“什么都不懂，凭啥拿那么多钱，凭啥升官！”这是普遍的典型的工程师的迂腐之言。8051很牛吗？人家能上去必然有他的本事，而且是你没有的本事。你想想，老板搞经营那么多年，难道见识不如你这个新兵？人家或许善于管理，善于领会老板意图，善于部门协调等等。因此务必培养自己多方面的能力，包括管理，亲和力，察言观色能力，攻关能力等，要成为综合素质的高手，则前途无量，否则只能躲在角落看示波器！技术以外的技能才是更重要的本事！！从古到今，美国***，一律如此！　　　 </p>
		<p>[4]多交社会三教九流的朋友！不要只和工程师交往，认为有共同语言，其实更重要的是和其他类人物交往，如果你希望有朝一日当老板或高层管理，那么你整日面对的就是这些人。了解他们的经历，思维习惯，爱好，学习他们处理问题的模式，了解社会各个角落的现象和问题，这是以后发展的巨大的本钱，没有这些以后就会笨手笨脚，跌跌撞撞，遇到重重困难，交不少学费，成功的概率大大降低！ </p>
		<p>[5]知识涉猎不一定专，但一定要广！多看看其他方面的书，金融，财会，进出口，税务，法律等等，为以后做一些积累，以后的用处会更大！会少交许多学费！！　 </p>
		<p>[6]抓住时机向技术管理或市场销售方面的转变！要想有前途就不能一直搞开发，适当时候要转变为管理或销售，前途会更大，以前搞技术也没有白搞，以后还用得着。搞管理可以培养自己的领导能力，搞销售可以培养自己的市场概念和思维，同时为自己以后发展积累庞大的人脉！应该说这才是前途的真正支柱！！！　　　 </p>
		<p>[7]逐渐克服自己的心里弱点和性格缺陷！多疑，敏感，天真（贬义，并不可爱），犹豫不决，胆怯，多虑，脸皮太薄，心不够黑，教条式思维。。。这些工程师普遍存在的性格弱点必须改变！很难吗？只在床上想一想当然不可能，去帮朋友守一个月地摊，包准有效果，去实践，而不要只想！不克服这些缺点，一切不可能，甚至连项目经理都当不好--尽管你可能技术不错！　　　 </p>
		<p>[8]工作的同时要为以后做准备！建立自己的工作环境！及早为自己配置一个工作环境，装备电脑，示波器（可以买个二手的），仿真器，编程器等，业余可以接点活，一方面接触市场，培养市场感觉，同时也积累资金，更重要的是准备自己的产品，咱搞技术的没有钱，只有技术，技术的代表不是学历和证书，而是产品，拿出象样的产品，就可技术转让或与人合作搞企业！先把东西准备好，等待机会，否则，有了机会也抓不住！　　　 </p>
		<p>[9]要学会善于推销自己！不仅要能干，还要能说，能写，善于利用一切机会推销自己，树立自己的品牌形象，很必要！要创造条件让别人了解自己，不然老板怎么知道你能干？外面的投资人怎么相信你？提早把自己推销出去，机会自然会来找你！搞个个人主页是个好注意！！特别是培养自己在行业的名气，有了名气，高薪机会自不在话下，更重要的是有合作的机会...　　　 </p>
		<p>[10]该出手时便出手！永远不可能有100%把握！！！条件差不多就要大胆去干，去闯出自己的事业，不要犹豫，不要彷徨，干了不一定成功，但至少为下一次冲击积累了经验，不干永远没出息，而且要干成必然要经历失败。不经历风雨，怎么见彩虹，没有人能随随便便成功！</p>
		<p>来源：<a href="http://ronghuicoffee.spaces.msn.com/blog/cns!3DC6B634723CEECE!124.entry"><font color="#002c99">http://ronghuicoffee.spaces.msn.com/blog/cns!3DC6B634723CEECE!124.entry</font></a></p>
<img src ="http://www.blogjava.net/myblogs/aggbug/68180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/myblogs/" target="_blank">程序-人生</a> 2006-09-07 09:35 <a href="http://www.blogjava.net/myblogs/archive/2006/09/07/68180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个完整的日期实现类</title><link>http://www.blogjava.net/myblogs/archive/2006/06/30/55863.html</link><dc:creator>程序-人生</dc:creator><author>程序-人生</author><pubDate>Fri, 30 Jun 2006 02:04:00 GMT</pubDate><guid>http://www.blogjava.net/myblogs/archive/2006/06/30/55863.html</guid><wfw:comment>http://www.blogjava.net/myblogs/comments/55863.html</wfw:comment><comments>http://www.blogjava.net/myblogs/archive/2006/06/30/55863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/myblogs/comments/commentRss/55863.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/myblogs/services/trackbacks/55863.html</trackback:ping><description><![CDATA[
		<p>一个完整的日期实现类</p>
		<p>package com.nyhr.util;</p>
		<p>import java.util.GregorianCalendar;<br />import java.text.DateFormat;<br />import java.text.SimpleDateFormat;<br />import java.util.Date;<br />import java.util.Locale;<br />import java.util.Calendar;</p>
		<p>/**<br /> * &lt;p&gt;Title: 日期时间处理&lt;/p&gt;<br /> * &lt;p&gt;Description: 工具类&lt;/p&gt;<br /> * &lt;p&gt;Copyright: Copyright (c) 2005&lt;/p&gt;<br /> * &lt;p&gt;<br /> * @version 1.0<br /> * @author <br /> */<br />public class DateUtil<br />{<br />    /**<br />     * 缺省的DateFormat对象，可以将一个java.util.Date格式化成yyyy-mm-dd输出<br />     */<br />    private static DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.SIMPLIFIED_CHINESE);</p>
		<p>    /**<br />     * 私有构造函数<br />     */<br />    private DateUtil()<br />    {<br />    }</p>
		<p>    /**<br />     * &lt;p&gt;返回一个当前的时间，并按格式转换为字符串&lt;/p&gt;<br />     * 例：17:27:03<br />     * @return String<br />     */<br />    public static String getNowTime()<br />    {<br />        GregorianCalendar gcNow = new GregorianCalendar();<br />        java.util.Date dNow = gcNow.getTime();<br />        DateFormat df = DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.SIMPLIFIED_CHINESE);<br />        return df.format(dNow);<br />    }</p>
		<p>    /**<br />     * &lt;p&gt;返回一个当前日期，并按格式转换为字符串&lt;/p&gt;<br />     * 例：2004-4-30<br />     * @return String<br />     */<br />    public static String getNowDate()<br />    {<br />        GregorianCalendar gcNow = new GregorianCalendar();<br />        java.util.Date dNow = gcNow.getTime();<br />        DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.SIMPLIFIED_CHINESE);<br />        return df.format(dNow);<br />    }</p>
		<p>    /**<br />     * &lt;p&gt;返回一个当前日期和时间，并按格式转换为字符串&lt;/p&gt;<br />     * 例：2004-4-30 17:27:03<br />     * @return String<br />     */<br />    public static String getNowDateTime()<br />    {<br />        GregorianCalendar gcNow = new GregorianCalendar();<br />        java.util.Date dNow = gcNow.getTime();<br />        DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.SIMPLIFIED_CHINESE);<br />        return df.format(dNow);<br />    }</p>
		<p>    /**<br />     * &lt;p&gt;返回当前年&lt;/p&gt;<br />     * @return int<br />     */<br />    public static int getThisYear()<br />    {<br />        GregorianCalendar gcNow = new GregorianCalendar();<br />        return gcNow.get(GregorianCalendar.YEAR);<br />    }</p>
		<p>    /**<br />     * 返回本月<br />     * @return int<br />     */<br />    public static int getThisMonth()<br />    {<br />        GregorianCalendar gcNow = new GregorianCalendar();<br />        return gcNow.get(GregorianCalendar.MONTH) + 1;<br />    }</p>
		<p>    /**<br />     * 返回今天是本月的第几天<br />     * @return int 从1开始<br />     */<br />    public static int getToDayOfMonth()<br />    {<br />        GregorianCalendar gcNow = new GregorianCalendar();<br />        return gcNow.get(GregorianCalendar.DAY_OF_MONTH);<br />    }<br />    /**<br />     * 返回当前的小时<br />     * @return int <br />     */<br />    public static int getHour()<br />    {<br />      GregorianCalendar gcNow = new GregorianCalendar();<br />         return gcNow.get(GregorianCalendar.HOUR);<br />    }<br />    /**<br />     * 返回当前的分钟<br />     * @return int 返回当前的分钟<br />     */<br />    public static int getMinute()<br />    {<br />      GregorianCalendar gcNow = new GregorianCalendar();<br />         return gcNow.get(GregorianCalendar.MINUTE);<br />    }<br />    /**<br />     * 返回当前的秒数<br />     * @return int 第几秒<br />     */<br />    public static int getSecond()<br />    {<br />      GregorianCalendar gcNow = new GregorianCalendar();<br />         return gcNow.get(GregorianCalendar.SECOND);<br />    }<br />    /**<br />     * 返回今天是本年的第几周 <br />     * @return int 从1开始<br />     */<br />     <br />    public static int getToWeekOfYear()<br />    {<br />     GregorianCalendar gcNow = new GregorianCalendar();<br />     return gcNow.get(GregorianCalendar.WEEK_OF_YEAR);<br />    }<br />    /**<br />     * 返回一格式化的日期<br />     * @param time long<br />     * @return String yyyy-mm-dd 格式<br />     */<br />    public static String formatDate(java.util.Date date)<br />    {<br />        if (date == null) return "";<br />        else return df.format(date);<br />    }</p>
		<p>    /**<br />     * 返回一格式化的日期<br />     * @param time long<br />     * @return String 2005-6-17 格式<br />     */<br />    public static String formatSDate(java.util.Date date)<br />    {<br />        if (date == null) return "";<br />        else<br />        {<br />            SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-M-d HH:mm:ss");<br />            return bartDateFormat.format(date);<br />        }<br />    }</p>
		<p>    /**<br />     * 返回已添加指定时间间隔的日期<br />     * @param interval  表示要添加的时间间隔("y":年;"d":天;"m":月;如有必要可以自行增加)<br />     * @param number    表示要添加的时间间隔的个数<br />     * @param date      java.util.Date()<br />     * @return String   2005-5-12格式的日期字串<br />     */<br />    public static String dateAdd(String interval, int number,<br />            java.util.Date date)<br />    {<br />        String strTmp = "";<br />        GregorianCalendar gc = new GregorianCalendar();<br />        gc.setTime(date);<br />        //加若干年<br />        if (interval.equals("y"))<br />        {<br />            int currYear = gc.get(Calendar.YEAR);<br />            gc.set(Calendar.YEAR, currYear + number);<br />        }<br />        //加若干月<br />        else if (interval.equals("m"))<br />        {<br />            int currMonth = gc.get(Calendar.MONTH);<br />            gc.set(Calendar.MONTH, currMonth + number);<br />        }<br />        //加若干天<br />        else if (interval.equals("d"))<br />        {<br />            int currDay = gc.get(Calendar.DATE);<br />            gc.set(Calendar.DATE, currDay + number);<br />        }<br />        //加若小时<br />        else if (interval.equals("h"))<br />        {<br />            int currDay = gc.get(Calendar.HOUR);<br />            gc.set(Calendar.HOUR, currDay + number);<br />        }<br />        SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-M-d HH:mm:ss");<br />        strTmp = bartDateFormat.format(gc.getTime());<br />        return strTmp;<br />    }</p>
		<p>    /**<br />     * &lt;p&gt;返回两个日期之间的单位间隔数&lt;/p&gt;<br />     * @param a java.util.Date<br />     * @param b java.util.Date<br />     * @return int 间隔数<br />     */<br />    public static int dateDiff(java.util.Date a, java.util.Date b)<br />    {<br />        int tempDifference = 0;<br />        int difference = 0;<br />        Calendar earlier = Calendar.getInstance();<br />        Calendar later = Calendar.getInstance();</p>
		<p>        if (a.compareTo(b) &lt; 0)<br />        {<br />            earlier.setTime(a);<br />            later.setTime(b);<br />        }<br />        else<br />        {<br />            earlier.setTime(b);<br />            later.setTime(a);<br />        }</p>
		<p>        while (earlier.get(Calendar.YEAR) != later.get(Calendar.YEAR))<br />        {<br />            tempDifference = 365 * (later.get(Calendar.YEAR) - earlier.get(Calendar.YEAR));<br />            difference += tempDifference;</p>
		<p>            earlier.add(Calendar.DAY_OF_YEAR, tempDifference);<br />        }</p>
		<p>        if (earlier.get(Calendar.DAY_OF_YEAR) != later.get(Calendar.DAY_OF_YEAR))<br />        {<br />            tempDifference = later.get(Calendar.DAY_OF_YEAR)<br />                    - earlier.get(Calendar.DAY_OF_YEAR);<br />            difference += tempDifference;</p>
		<p>            earlier.add(Calendar.DAY_OF_YEAR, tempDifference);<br />        }</p>
		<p>        return difference;<br />    }</p>
		<p>/**<br />     * &lt;p&gt;该方法是获得到每月1号星期一的数据&lt;/p&gt;<br />     * @return -返回一个数字<br />     */<br />    /**<br />     * &lt;p&gt;该方法是获得到每月1号星期一的数据&lt;/p&gt;<br />     * @return -返回一个数字<br />     */<br />    public static int getDate(int curYear,int curMonth ,int curDate)<br />    {<br />     int day1 = 0;<br />     Calendar cal = Calendar.getInstance(); <br />     cal.clear(); <br />     cal.set(curYear,curMonth-1,curDate); <br />     int dayOfWeek = cal.get(cal.DAY_OF_WEEK);      <br />     System.out.println("curDate="+curDate +" dayOfWeek "+dayOfWeek);<br />     switch(dayOfWeek)<br />     {<br />      case 1:   //星期天<br />       day1=0;<br />       break;<br />      case 2:   //星期一<br />       day1=1;<br />       break;<br />      case 3:   //星期二<br />       day1=2;<br />       break;<br />      case 4:   //星期三<br />       day1=3;<br />       break;<br />      case 5:   //星期四<br />       day1=4;<br />       break;<br />      case 6:   //星期五<br />       day1=5;<br />       break;<br />      case 7:   //星期六<br />       day1=6;<br />       break;<br />     }  <br />     return day1;<br />    } <br />    public static String checkTime(int id)<br />    {<br />        String bol = "";<br />        Calendar tt = Calendar.getInstance();      <br />        String currDate=getNowDate();    <br />       System.out.println("currDate="+currDate);<br />        int result = tt.get(Calendar.DAY_OF_WEEK);<br />  <br />        int shour = tt.get(Calendar.HOUR_OF_DAY);<br />        <br />        if (id == 3)<br />        {<br />            switch (result)<br />            {<br />                case 1:<br />                    break;<br />                case 7:<br />                    if ((shour &gt;= 8) &amp;&amp; (shour &lt; 12))<br />                    {<br />                        bol = "disabled";<br />                        break;<br />                    }<br />                default:<br />                    if ((shour &gt;= 8) &amp;&amp; (shour &lt; 12))<br />                    {<br />                        bol = "disabled";<br />                        break;<br />                    }<br />                    else if ((shour &gt;= 14) &amp;&amp; (shour &lt; 17))<br />                    {<br />                        bol = "disabled";<br />                        break;<br />                    }<br />            }<br />        }<br />        return bol;<br />    }<br />    /**<br />     * &lt;p&gt;该方法是将字符型转变成日期型&lt;/p&gt;<br />     * @param strX -传入字符类型<br />     * @return -返回日期类型 <br />     */<br />    public static Date getStrDate(String strX)<br />    {<br />     Date date1=new Date();<br />     if (!strX.equals(""))<br />     {<br />      try<br />      {<br />       date1=(DateFormat.getDateInstance()).parse(strX);<br />      }<br />      catch(Exception ex)<br />      {<br />       Debug.log("hhh","getStrDate()",ex.toString());<br />       //System.out.println(ex.toString());<br />      }<br />     }<br />     else<br />     {<br />       GregorianCalendar gcNow = new GregorianCalendar();<br />           date1 = gcNow.getTime();<br />     }<br />     <br />     return date1;<br />    }<br />    <br />    /**<br />     * &lt;p&gt;比较两日期字符串的大小&lt;/p&gt;<br />     * @param d1<br />     * @param d2<br />     * @return (d1&gt;d2)?2:(d1=d2)?1:0<br />     */<br />    public static int compareDate(String d1, String d2)<br />    {<br />     short vl = 1;<br />     GregorianCalendar gc = new GregorianCalendar();<br />        gc.setTime(getStrDate(d1));<br />        int year = gc.get(GregorianCalendar.YEAR);<br />        int month = gc.get(GregorianCalendar.MONTH);<br />        int day = gc.get(GregorianCalendar.DAY_OF_MONTH);<br />        gc.setTime(getStrDate(d2));<br />        int tempYear = gc.get(GregorianCalendar.YEAR);<br />        int tempMonth = gc.get(GregorianCalendar.MONTH);<br />        int tempDay = gc.get(GregorianCalendar.DAY_OF_MONTH);<br />        if(year !=  tempYear)<br />        {<br />         if (year&gt;tempYear)<br />          vl = 2;<br />         else<br />          vl = 0;<br />        }<br />        else<br />        {<br />         if (month != tempMonth)<br />         {<br />          if(month&gt;tempMonth)<br />           vl = 2;<br />          else<br />           vl = 0;<br />         }<br />         else<br />         {<br />          if (day != tempDay)<br />          {<br />           if (day &gt; tempDay)<br />            vl = 2;<br />              else<br />               vl = 0;<br />          }<br />         }<br />        }<br />        return vl;<br />    }<br />    <br />}<br /></p>
<img src ="http://www.blogjava.net/myblogs/aggbug/55863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/myblogs/" target="_blank">程序-人生</a> 2006-06-30 10:04 <a href="http://www.blogjava.net/myblogs/archive/2006/06/30/55863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网页制作之在线视频播放代码</title><link>http://www.blogjava.net/myblogs/archive/2006/06/29/55783.html</link><dc:creator>程序-人生</dc:creator><author>程序-人生</author><pubDate>Thu, 29 Jun 2006 08:59:00 GMT</pubDate><guid>http://www.blogjava.net/myblogs/archive/2006/06/29/55783.html</guid><wfw:comment>http://www.blogjava.net/myblogs/comments/55783.html</wfw:comment><comments>http://www.blogjava.net/myblogs/archive/2006/06/29/55783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/myblogs/comments/commentRss/55783.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/myblogs/services/trackbacks/55783.html</trackback:ping><description><![CDATA[现在把一些不同格式的视频文件的网页代码总结如下,希望对大家用所帮助.使用方法说明:你应该把下面代码中的视频路径换成与你网站中内容相适应的相对路径或者绝对路径,播放器的窗口大小可以修改高和宽的参数. 
<ul><strong>1.avi格式 </strong><p>&lt;object id="video" width="400" height="200" border="0" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"&gt;<br />&lt;param name="ShowDisplay" value="0"&gt;<br />&lt;param name="ShowControls" value="1"&gt;<br />&lt;param name="AutoStart" value="1"&gt;<br />&lt;param name="AutoRewind" value="0"&gt;<br />&lt;param name="PlayCount" value="0"&gt;<br />&lt;param name="Appearance value="0 value="""&gt;<br />&lt;param name="BorderStyle value="0 value="""&gt;<br />&lt;param name="MovieWindowHeight" value="240"&gt;<br />&lt;param name="MovieWindowWidth" value="320"&gt;<br />&lt;param name="FileName" value="http://www.jianzhan8.cn/sample.avi"&gt;<br />&lt;embed width="400" height="200" border="0" showdisplay="0" showcontrols="1" autostart="1" autorewind="0" playcount="0" moviewindowheight="240" moviewindowwidth="320" filename="http://www.jianzhan8.cn/sample.avi" src="<span class="style3">sample.avi</span>"&gt;<br />&lt;/embed&gt; <br />&lt;/object&gt;</p></ul><ul><strong>2.mpg格式</strong><p>&lt;object classid="clsid:05589FA1-C356-11CE-BF01-00AA0055595A" id="ActiveMovie1" width="239" height="250"&gt;<br />&lt;param name="Appearance" value="0"&gt;<br />&lt;param name="AutoStart" value="-1"&gt;<br />&lt;param name="AllowChangeDisplayMode" value="-1"&gt;<br />&lt;param name="AllowHideDisplay" value="0"&gt;<br />&lt;param name="AllowHideControls" value="-1"&gt;<br />&lt;param name="AutoRewind" value="-1"&gt;<br />&lt;param name="Balance" value="0"&gt;<br />&lt;param name="CurrentPosition" value="0"&gt;<br />&lt;param name="DisplayBackColor" value="0"&gt;<br />&lt;param name="DisplayForeColor" value="16777215"&gt;<br />&lt;param name="DisplayMode" value="0"&gt;<br />&lt;param name="Enabled" value="-1"&gt;<br />&lt;param name="EnableContextMenu" value="-1"&gt;<br />&lt;param name="EnablePositionControls" value="-1"&gt;<br />&lt;param name="EnableSelectionControls" value="0"&gt;<br />&lt;param name="EnableTracker" value="-1"&gt;<br />&lt;param name="Filename" value="<span class="style3">http://www.jianzhan8.cn/sample.mpg</span>" valuetype="ref"&gt;<br />&lt;param name="FullScreenMode" value="0"&gt;<br />&lt;param name="MovieWindowSize" value="0"&gt;<br />&lt;param name="PlayCount" value="1"&gt;<br />&lt;param name="Rate" value="1"&gt;<br />&lt;param name="SelectionStart" value="-1"&gt;<br />&lt;param name="SelectionEnd" value="-1"&gt;<br />&lt;param name="ShowControls" value="-1"&gt;<br />&lt;param name="ShowDisplay" value="-1"&gt;<br />&lt;param name="ShowPositionControls" value="0"&gt;<br />&lt;param name="ShowTracker" value="-1"&gt;<br />&lt;param name="Volume" value="-480"&gt;<br />&lt;/object&gt;</p></ul><ul><strong>3.rm格式 </strong><p>&lt;OBJECT ID=video1 CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" HEIGHT=288 WIDTH=352&gt; &lt;param name="_ExtentX" value="9313"&gt;<br />&lt;param name="_ExtentY" value="7620"&gt;<br />&lt;param name="AUTOSTART" value="0"&gt;<br />&lt;param name="SHUFFLE" value="0"&gt;<br />&lt;param name="PREFETCH" value="0"&gt;<br />&lt;param name="NOLABELS" value="0"&gt;<br />&lt;param name="SRC" value="rtsp://203.207.131.35/vod/dawan-a.rm";&gt;<br />&lt;param name="CONTROLS" value="ImageWindow"&gt;<br />&lt;param name="CONSOLE" value="Clip1"&gt;<br />&lt;param name="LOOP" value="0"&gt;<br />&lt;param name="NUMLOOP" value="0"&gt;<br />&lt;param name="CENTER" value="0"&gt;<br />&lt;param name="MAINTAINASPECT" value="0"&gt;<br />&lt;param name="BACKGROUNDCOLOR" value="#000000"&gt;&lt;embed SRC type="audio/x-pn-realaudio-plugin" CONSOLE="Clip1" CONTROLS="ImageWindow" HEIGHT="288" WIDTH="352" AUTOSTART="false"&gt; &lt;/OBJECT&gt; </p></ul><ul><strong>4.wmv格式 </strong><p>&lt;object id="NSPlay" width=200 height=180 classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" standby="Loading Microsoft Windows Media Player components..." type="application/x-oleobject" align="right" hspace="5"&gt;<br />&lt;!-- ASX File Name --&gt;<br />&lt;param name="AutoRewind" value=1&gt;<br />&lt;param name="FileName" value="xxxxxx.wmv"&gt;<br />&lt;!-- Display Controls --&gt;<br />&lt;param name="ShowControls" value="1"&gt;<br />&lt;!-- Display Position Controls --&gt;<br />&lt;param name="ShowPositionControls" value="0"&gt;<br />&lt;!-- Display Audio Controls --&gt;<br />&lt;param name="ShowAudioControls" value="1"&gt;<br />&lt;!-- Display Tracker Controls --&gt;<br />&lt;param name="ShowTracker" value="0"&gt;<br />&lt;!-- Show Display --&gt;<br />&lt;param name="ShowDisplay" value="0"&gt;<br />&lt;!-- Display Status Bar --&gt;<br />&lt;param name="ShowStatusBar" value="0"&gt;<br />&lt;!-- Diplay Go To Bar --&gt;<br />&lt;param name="ShowGotoBar" value="0"&gt;<br />&lt;!-- Display Controls --&gt;<br />&lt;param name="ShowCaptioning" value="0"&gt;<br />&lt;!-- Player Autostart --&gt;<br />&lt;param name="AutoStart" value=1&gt;<br />&lt;!-- Animation at Start --&gt;<br />&lt;param name="Volume" value="-2500"&gt;<br />&lt;param name="AnimationAtStart" value="0"&gt;<br />&lt;!-- Transparent at Start --&gt;<br />&lt;param name="TransparentAtStart" value="0"&gt;<br />&lt;!-- Do not allow a change in display size --&gt;<br />&lt;param name="AllowChangeDisplaySize" value="0"&gt;<br />&lt;!-- Do not allow scanning --&gt;<br />&lt;param name="AllowScan" value="0"&gt;<br />&lt;!-- Do not show contect menu on right mouse click --&gt;<br />&lt;param name="EnableContextMenu" value="0"&gt;<br />&lt;!-- Do not allow playback toggling on mouse click --&gt;<br />&lt;param name="ClickToPlay" value="0"&gt;<br />&lt;/object&gt;<br /></p></ul><ul><strong>5:最简单的播放代码 </strong><p>&lt;embed src="http://www.jianzhan8.cn/sample.wmv" autostart="true" loop="true" width="200" height="150" &gt; <br />把这个网址http://www.jianzhan8.cn/sample.wmv换成你要看的电影就行了.</p></ul><ul><strong>6:有图像的rm格式</strong><p>&lt;OBJECT classid=clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA height=288 id=video1 width=305 VIEWASTEXT&gt;<br />&lt;param name=_ExtentX value=5503&gt;<br />&lt;param name=_ExtentY value=1588&gt;<br />&lt;param name=AUTOSTART value=-1&gt;<br />&lt;param name=SHUFFLE value=0&gt;<br />&lt;param name=PREFETCH value=0&gt;<br />&lt;param name=NOLABELS value=0&gt;<br />&lt;param name=SRC value=http://www.jianzhan8.cn/sample.ram&gt;<br />&lt;param name=CONTROLS value=Imagewindow,StatusBar,ControlPanel&gt;<br />&lt;param name=CONSOLE value=RAPLAYER&gt;<br />&lt;param name=LOOP value=0&gt;<br />&lt;param name=NUMLOOP value=0&gt;<br />&lt;param name=CENTER value=0&gt;<br />&lt;param name=MAINTAINASPECT value=0&gt;<br />&lt;param name=BACKGROUNDCOLOR value=#000000&gt;<br />&lt;/OBJECT&gt;<br /></p></ul><ul><strong>7:无图像的rm格式：(如相声，歌曲...) </strong><p>&lt;object ID=video2 WIDTH=300 HEIGHT=62 CLASSID=CLSID:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA&gt;<br />&lt;param name=_ExtentX value=9657&gt;<br />&lt;param name=_ExtentY value=847&gt;<br />&lt;param name=AUTOSTART value=-1&gt;<br />&lt;param name=SHUFFLE value=0&gt;<br />&lt;param name=PREFETCH value=0&gt;<br />&lt;param name=NOLABELS value=0&gt;<br />&lt;param name=SRC value=http://www.jianzhan8.cn/sample.rm&gt;<br />&lt;param name=CONTROLS value=StatusBar,controlpanel&gt;<br />&lt;param name=CONSOLE value=Clip1&gt;<br />&lt;param name=LOOP value=0&gt;<br />&lt;param name=NUMLOOP value=0&gt;<br />&lt;param name=CENTER value=0&gt;<br />&lt;param name=MAINTAINASPECT value=0&gt;<br />&lt;param name=BACKGROUNDCOLOR value=#000000&gt;<br />&lt;/object&gt;<br /></p></ul><ul><strong>8:最简单的media格式的播放器 </strong><p>&lt;embed src=mms://www.jianzhan8.cn/sample.wmv width=200 height=200 autostart=true loop=true&gt;&lt;/embed&gt;</p></ul><ul><strong>9:有图像的media播放器，自动调用网上的插件</strong><p>&lt;object id=nstv classid=CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6 width=280 height=265 codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701standby=Loading Microsoft? Windows Media? Player components... type=application/x-oleobject&gt;<br />&lt;param name=URL value=http://www.jianzhan8.cn/sample.wma&gt;<br />&lt;PARAM NAME=UIMode value=full&gt;&lt;PARAM NAME=AutoStart value=true&gt;<br />&lt;PARAM NAME=Enabled value=true&gt;<br />&lt;PARAM NAME=enableContextMenu value=false&gt;<br />&lt;param name=WindowlessVideo value=true&gt;&lt;/object&gt;<br /></p></ul><ul><strong>10:无图像的media播放器</strong><p>&lt;object id=nstv classid=CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6 width=280 height=60 codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701standby=Loading Microsoft? Windows Media? Player components... type=application/x-oleobject&gt;<br />&lt;param name=URL value=http://www.jianzhan8.cn/sample.wma&gt;<br />&lt;PARAM NAME=UIMode value=full&gt;&lt;PARAM NAME=AutoStart value=true&gt;<br />&lt;PARAM NAME=Enabled value=true&gt;<br />&lt;PARAM NAME=enableContextMenu value=false&gt;<br />&lt;/object&gt;<br /></p></ul><ul><strong>11:在线播放rm格式视频代码</strong><p>&lt;object id="player" name="player" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width="400" height="272"&gt;<br />&lt;param name="_ExtentX" value="18415"&gt;<br />&lt;param name="_ExtentY" value="9102"&gt;<br />&lt;param name="AUTOSTART" value="-1"&gt;<br />&lt;param name="SHUFFLE" value="0"&gt;<br />&lt;param name="PREFETCH" value="0"&gt;<br />&lt;param name="NOLABELS" value="-1"&gt;<br />&lt;param name="SRC" value="http://www.jianzhan8.cn/sample.rm"&gt;<br />&lt;param name="CONTROLS" value="Imagewindow"&gt;<br />&lt;param name="CONSOLE" value="clip1"&gt;<br />&lt;param name="LOOP" value="0"&gt;<br />&lt;param name="NUMLOOP" value="0"&gt;<br />&lt;param name="CENTER" value="0"&gt;<br />&lt;param name="MAINTAINASPECT" value="0"&gt;<br />&lt;param name="BACKGROUNDCOLOR" value="#000000"&gt;<br />&lt;/object&gt;&lt;br&gt;<br />&lt;object ID="RP2" CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" WIDTH="400" HEIGHT="57"&gt;<br />&lt;param name="_ExtentX" value="18415"&gt;<br />&lt;param name="_ExtentY" value="1005"&gt;<br />&lt;param name="AUTOSTART" value="-1"&gt;<br />&lt;param name="SHUFFLE" value="0"&gt;<br />&lt;param name="PREFETCH" value="0"&gt;<br />&lt;param name="NOLABELS" value="-1"&gt;<br />&lt;param name="SRC" value="http://www.jianzhan8.cn/sample.rm"&gt;<br />&lt;PARAM NAME="CONTROLS" VALUE="ControlPanel,StatusBar"&gt;<br />&lt;param name="CONSOLE" value="clip1"&gt;<br />&lt;param name="LOOP" value="0"&gt;<br />&lt;param name="NUMLOOP" value="0"&gt;<br />&lt;param name="CENTER" value="0"&gt;<br />&lt;param name="MAINTAINASPECT" value="0"&gt;<br />&lt;param name="BACKGROUNDCOLOR" value="#000000"&gt;<br />&lt;/object&gt;<br /><br />转自：<a href="http://www.jianzhan8.cn/shipin/index.htm">http://www.jianzhan8.cn/shipin/index.htm</a></p></ul><img src ="http://www.blogjava.net/myblogs/aggbug/55783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/myblogs/" target="_blank">程序-人生</a> 2006-06-29 16:59 <a href="http://www.blogjava.net/myblogs/archive/2006/06/29/55783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java文件操作大全</title><link>http://www.blogjava.net/myblogs/archive/2006/06/29/55712.html</link><dc:creator>程序-人生</dc:creator><author>程序-人生</author><pubDate>Thu, 29 Jun 2006 03:45:00 GMT</pubDate><guid>http://www.blogjava.net/myblogs/archive/2006/06/29/55712.html</guid><wfw:comment>http://www.blogjava.net/myblogs/comments/55712.html</wfw:comment><comments>http://www.blogjava.net/myblogs/archive/2006/06/29/55712.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/myblogs/comments/commentRss/55712.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/myblogs/services/trackbacks/55712.html</trackback:ping><description><![CDATA[文件的建立/检查与删除 <br /><code>＜%@ page contentType="text/html;charset=gb2312"%&gt; <br />＜%@ page import="java.io.*"%&gt; <br />＜html&gt; <br />＜head&gt; <br />＜title&gt;文件的建立、检查与删除＜/title&gt; <br />＜/head&gt; <br />＜body&gt; <br />＜% <br />String path=request.getRealPath(""); <br />//out.println(path); <br />File f=new File(path,"File.txt"); <br />//out.println(f); <br />//out.println(f.exists()); <br /><br />if(f.exists()){//检查File.txt是否存在 <br />f.delete();//删除File.txt文件 <br />out.println(path + "\\File.txt 存在，已删除。"); <br />}else{ <br />f.createNewFile();//在当前目录下建立一个名为File.txt的文件 <br />out.println(path + "\\File.txt 不存在，已建立。");//输出目前所在的目录路径 <br />} <br />%&gt; <br /><br /></code><strong>目录的建立/检查与删除</strong><br /><code>＜%@ page contentType="text/html;charset=gb2312"%&gt; <br />＜%@ page import="java.io.*"%&gt; <br />＜html&gt; <br />＜head&gt; <br />＜title&gt;目录的建立/检查与删除＜/title&gt; <br />＜/head&gt; <br />＜body&gt; <br />＜% <br />String path=request.getRealPath(""); <br />path=path + "\\Sub";//将要建立的目录路径 <br />File d=new File(path);//建立代表Sub目录的File对象，并得到它的一个引用 <br />if(d.exists()){//检查Sub目录是否存在 <br />d.delete(); <br />out.println("Sub目录存在，已删除"); <br />}else{ <br />d.mkdir();//建立Sub目录 <br />out.println("Sub目录不存在，已建立"); <br />} <br />%&gt; <br />＜/body&gt; <br />＜/html&gt; <br /><br /></code><br /><strong>如何在JSP中处理虚拟目录</strong><br /><code>＜%@ page contentType="text/html;charset=gb2312"%&gt; <br />＜%@ page import="java.io.*"%&gt; <br />＜html&gt; <br />＜head&gt; <br />＜title&gt;JSP中如何处理虚拟目录＜/title&gt; <br />＜/head&gt; <br />＜body&gt; <br />取得虚拟目录对应的磁盘路径＜br&gt; <br />Web站点主目录的位置为＜font color=#ff0000&gt;＜%=request.getRealPath("/")%&gt;＜/font&gt;＜br&gt; <br />JSP网页所在的目录位置＜font color=#ff0000&gt;＜%=request.getRealPath("./")%&gt;＜/font&gt;＜br&gt; <br />JSP网页所在目录上一层目录的位置＜font color=#ff0000&gt;＜%=request.getRealPath("../")%&gt;＜/font&gt;＜br&gt; <br />＜/body&gt; <br />＜/html&gt; <br /><br /><br /><strong>文件属性的取得 <br /></strong>＜%@ page contentType="text/html;charset=gb2312"%&gt; <br />＜%@ page import="java.util.Date,java.io.*"%&gt; <br />＜html&gt; <br />＜head&gt; <br />＜title&gt;文件属性的取得＜/title&gt; <br />＜/head&gt; <br />＜body&gt; <br />＜% <br />String path=request.getRealPath("/"); <br />File f=new File(path,"ReadData.txt"); <br />if(f.exists()){ <br />%&gt; <br />＜%=f.getName()%&gt;的属性如下：＜br&gt;＜br&gt; <br />文件长度为：＜%=f.length()%&gt; <br />＜%=f.isFile()?"是文件":"不是文件"%&gt;＜br&gt; <br />＜%=f.isDirectory()?"是目录":"不是目录"%&gt;＜br&gt; <br />＜%=f.canRead()?"可读取":"不可读取"%&gt;＜br&gt; <br />＜%=f.canWrite()?"可写入":"不可写入"%&gt;＜br&gt; <br />＜%=f.isHidden()?"是隐藏文件":"不是隐藏文件"%&gt;＜br&gt; <br />文件的最后修改日期为：＜%=new Date(f.lastModified())%&gt;＜br&gt; <br />＜% <br />}else{ <br />f.createNewFile();//在当前目录下建立一个名为ReaData.txt的文件 <br />%&gt; <br />＜%=f.getName()%&gt;的属性如下：＜br&gt;＜br&gt; <br />文件长度为：＜%=f.length()%&gt; <br />＜%=f.isFile()?"是文件":"不是文件"%&gt;＜br&gt; <br />＜%=f.isDirectory()?"是目录":"不是目录"%&gt;＜br&gt; <br />＜%=f.canRead()?"可读取":"不可读取"%&gt;＜br&gt; <br />＜%=f.canWrite()?"可写入":"不可写入"%&gt;＜br&gt; <br />＜%=f.isHidden()?"是隐藏文件":"不是隐藏文件"%&gt;＜br&gt; <br />文件的最后修改日期为：＜%=new Date(f.lastModified())%&gt;＜br&gt; <br />＜% <br />} <br />%&gt; <br />＜/body&gt; <br />＜/html&gt; <br /><br /><br /></code><strong>取出目录中文件的方法</strong><br /><code>＜%@ page contentType="text/html;charset=gb2312"%&gt; <br />＜%@ page import="java.io.*"%&gt; <br />＜html&gt; <br />＜head&gt; <br />＜title&gt;取出目录中文件的方法--列出目录中的文件＜/title&gt; <br />＜/head&gt; <br />＜body&gt; <br />＜% <br />String path=request.getRealPath("/"); <br />File d=new File(path);//建立当前目录中文件的File对象 <br />File list[]=d.listFiles();//取得代表目录中所有文件的File对象数组 <br />out.println("＜font color=#ff0000&gt;" + path + "目录下的文件：＜/font&gt;＜br&gt;"); <br />for(int i=0;i＜list.length;i++){ <br />if(list＜I&gt;.isFile()){ <br />out.println(list＜I&gt;.getName() + "＜br&gt;"); <br />} <br />} <br />out.println("＜br&gt;＜font color=#ff0000&gt;" + path + "目录下的目录：＜/font&gt;＜br&gt;"); <br />for(int i=0;i＜list.length;i++){ <br />if(list＜I&gt;.isDirectory()){ <br />out.println(list＜I&gt;.getName() + "＜br&gt;"); <br />} <br />} <br />%&gt; <br />＜/body&gt; <br />＜/html&gt; <br /><br /></code><br /><strong>判断是否为空白文件 <br /></strong><code>＜%@ page contentType="text/html;charset=gb2312"%&gt; <br />＜%@ page import="java.io.*"%&gt; <br />＜html&gt; <br />＜head&gt; <br />＜title&gt;判断是否为空白文件＜/title&gt; <br />＜/head&gt; <br />＜body&gt; <br />＜% <br />String path=request.getRealPath("/"); <br />out.println(path); <br />FileReader fr=new FileReader(path + "\\AtEnd.txt");//建立FileReader对象，并实例化为fr <br />//对FileReader类生成的对象使用read()方法，可以从字符流中读取下一个字符。 <br />if(fr.read()==-1)//判断是否已读到文件的结尾 <br />{ <br />out.print("AtEnd.txt文件中没有数据＜br&gt;"); <br />}else{ <br />out.println("AtEnd.txt文件中有数据"); <br />} <br />fr.close(); <br />%&gt; <br />＜/body&gt; <br />＜/html&gt; <br /><br /></code><br /><strong>读取所有的文件数据</strong><br /><code>＜%@ page contentType="text/html;charset=gb2312"%&gt; <br />＜%@ page import="java.io.*,java.lang.*"%&gt; <br />＜html&gt; <br />＜head&gt; <br />＜title&gt;读取所有的文件数据＜/title&gt; <br />＜/head&gt; <br />＜body&gt; <br />＜% <br />String path=request.getRealPath("."); <br />FileReader fr=new FileReader(path + "\\ReadData.txt"); <br />//关键在于读取过程中，要判断所读取的字符是否已经到了文件的末尾，并且这个字符是不是文件中的断行符，即判断该字符值是否为13。 <br />int c=fr.read();//从文件中读取一个字符 <br />//判断是否已读到文件结尾 <br />while(c!=-1){ <br />out.print((char)c);//输出读到的数据 <br />c=fr.read();//从文件中继续读取数据 <br />if(c==13){//判断是否为断行字符 <br />out.print("＜br&gt;");//输出分行标签 <br />fr.skip(1);//略过一个字符 <br />//c=fr.read();//读取一个字符 <br />} <br />} <br />fr.close(); <br />%&gt; <br />＜/body&gt; <br />＜/html&gt; <br /><strong>一行一行读取数据</strong><br /><code>＜%@ page contentType="text/html;charset=gb2312"%&gt; <br />＜%@ page import="java.io.*"%&gt; <br />＜html&gt; <br />＜head&gt; <br />＜title&gt;文件读取＜/title&gt; <br />＜/head&gt; <br />＜body&gt; <br />＜% <br />String path=request.getRealPath("");//取得当前目录的路径 <br />FileReader fr=new FileReader(path + "\\file\\inc\\t.txt");//建立FileReader对象，并实例化为fr <br />BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象，并实例化为br <br />String Line=br.readLine();//从文件读取一行字符串 <br />//判断读取到的字符串是否不为空 <br />while(Line!=null){ <br />out.println(Line + "＜br&gt;");//输出从文件中读取的数据 <br />Line=br.readLine();//从文件中继续读取一行数据 <br />} <br />br.close();//关闭BufferedReader对象 <br />fr.close();//关闭文件 <br />%&gt; <br />＜/body&gt; <br />＜/html&gt; <br /><br /></code><br /><strong>略过文件中的字符不读取</strong><br /><code>＜%@ page contentType="text/html;charset=gb2312"%&gt; <br />＜%@ page import="java.io.*"%&gt; <br />＜html&gt; <br />＜head&gt; <br />＜title&gt;略过字节不读取＜/title&gt; <br />＜/head&gt; <br />＜body&gt; <br />＜% <br />String path=request.getRealPath("."); <br />FileReader fr=new FileReader(path + "\\ReadData.txt"); <br />fr.skip(2);//跳过2个字节 <br />int c=fr.read();//读取一个字节 <br />while(c!=-1){ <br />out.print((char)c); <br />c=fr.read(); <br />} <br />fr.close(); <br />%&gt; <br />＜/body&gt; <br />＜/html&gt; <br /><br /></code><br /><strong>将数据写入文件</strong><br /><code>＜%@ page contentType="text/html;charset=gb2312"%&gt; <br />＜%@ page import="java.io.*"%&gt; <br />＜html&gt; <br />＜head&gt; <br />＜title&gt;将数据写入文件＜/title&gt; <br />＜/head&gt; <br />＜body&gt; <br />＜% <br />String path=request.getRealPath("."); <br />FileWriter fw=new FileWriter(path + "\\WriteData.txt");//建立FileWriter对象，并实例化fw <br />//将字符串写入文件 <br />fw.write("大家好！"); <br />fw.write("本书是《JSP编程技巧》"); <br />fw.write("请多多指教！"); <br />fw.write("email:stride@sina.com"); <br />fw.close(); <br /><br />FileReader fr=new FileReader(path + "\\WriteData.txt"); <br />BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象，并实例化为br <br />String Line=br.readLine(); <br />//读取一行数据 <br />out.println(Line + "＜br&gt;"); <br />br.close();//关闭BufferedReader对象 <br />fr.close(); <br />%&gt; <br />＜/body&gt; <br />＜/html&gt; <br /><br /></code><br /><strong>将写入文件的数据分行</strong><br /><code>＜%@ page contentType="text/html;charset=gb2312"%&gt; <br />＜%@ page import="java.io.*"%&gt; <br />＜html&gt; <br />＜head&gt; <br />＜title&gt;将写入文件的数据分行＜/title&gt; <br />＜/head&gt; <br />＜body&gt; <br />＜% <br />String path=request.getRealPath("."); <br />FileWriter fw=new FileWriter(path + "\\WriteData.txt"); <br />BufferedWriter bw=new BufferedWriter(fw); <br />bw.write("大家好！"); <br />bw.write("本书是《JSP编程技巧》。"); <br />bw.newLine();//断行 <br />bw.write("请多多指教！"); <br />bw.newLine();//断行 <br />bw.write("email: stride@sina.com"); <br />bw.flush();//将数据更新至文件 <br />fw.close();//关闭文件流 <br />out.println("写入文件内容为：＜br&gt;"); <br />FileReader fr=new FileReader(path + "\\WriteData.txt"); <br />BufferedReader br=new BufferedReader(fr); <br />String Line=br.readLine();//读取一行数据 <br />while(Line!=null){ <br />out.println(Line + "＜br&gt;"); <br />Line=br.readLine(); <br />} <br />fr.close(); <br />%&gt; <br />＜/body&gt; <br />＜/html&gt; <br />如何将数据追加写入到文件 <br />＜%@ page contentType="text/html;charset=gb2312"%&gt; <br />＜%@ page import="java.io.*"%&gt; <br />＜html&gt; <br />＜head&gt; <br />＜title&gt;将写入文件的数据分行＜/title&gt; <br />＜/head&gt; <br />＜body&gt; <br />＜% <br />String path=request.getRealPath("."); <br />RandomAccessFile rf=new RandomAccessFile(path + "\\WriteData.txt","rw");//定义一个类RandomAccessFile的对象，并实例化 <br />rf.seek(rf.length());//将指针移动到文件末尾 <br />rf.writeBytes("\nAppend a line to the file!"); <br />rf.close();//关闭文件流 <br />out.println("写入文件内容为：＜br&gt;"); <br />FileReader fr=new FileReader(path + "\\WriteData.txt"); <br />BufferedReader br=new BufferedReader(fr);//读取文件的BufferedRead对象 <br />String Line=br.readLine(); <br />while(Line!=null){ <br />out.println(Line + "＜br&gt;"); <br />Line=br.readLine(); <br />} <br />fr.close();//关闭文件 <br />%&gt; <br />＜/body&gt; <br />＜/html&gt;＜/I&gt;＜/I&gt;＜/I&gt;＜/I&gt; <br /><br />摘自：<a href="http://www.cncsk.com/">http://www.cncsk.com</a></code></code><img src ="http://www.blogjava.net/myblogs/aggbug/55712.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/myblogs/" target="_blank">程序-人生</a> 2006-06-29 11:45 <a href="http://www.blogjava.net/myblogs/archive/2006/06/29/55712.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关JAVA文件加密与解密</title><link>http://www.blogjava.net/myblogs/archive/2006/06/29/55685.html</link><dc:creator>程序-人生</dc:creator><author>程序-人生</author><pubDate>Thu, 29 Jun 2006 02:19:00 GMT</pubDate><guid>http://www.blogjava.net/myblogs/archive/2006/06/29/55685.html</guid><wfw:comment>http://www.blogjava.net/myblogs/comments/55685.html</wfw:comment><comments>http://www.blogjava.net/myblogs/archive/2006/06/29/55685.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/myblogs/comments/commentRss/55685.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/myblogs/services/trackbacks/55685.html</trackback:ping><description><![CDATA[
		<div>
				<font color="#0000ff">import java.awt.*; <br />import java.awt.event.*; <br />import javax.swing.*; <br />import java.io.*; <br />import java.security.*; <br />import javax.crypto.*; <br />/*<br /> * FileEncrypterT.java<br /> *<br /> * Created on 2006年6月29日, 上午11:14<br /> */</font>
		</div>
		<div>
				<font color="#0000ff">package key;<br />import java.awt.*;<br />import java.awt.event.*;<br />import javax.swing.*;<br />import java.io.*;<br />import java.security.*;<br />import javax.crypto.*;<br />import javax.crypto.spec.*;<br />/**<br /> *<br /> * @author  dragon love<br /> */<br />public class FileEncrypterT extends javax.swing.JFrame {<br />    public static final int WIDTH = 550;<br />    public static final int HEIGHT = 200;<br />    <br />    /** This method is called from within the constructor to<br />     * initialize the form.<br />     * WARNING: Do NOT modify this code. The content of this method is<br />     * always regenerated by the Form Editor.<br />     */<br />    // &lt;editor-fold defaultstate="collapsed" desc=" Generated Code "&gt;                          <br />    private void initComponents() {<br />        <br />        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);<br />        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());<br />        getContentPane().setLayout(layout);<br />        layout.setHorizontalGroup(<br />                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)<br />                .add(0, 400, Short.MAX_VALUE)<br />                );<br />        layout.setVerticalGroup(<br />                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)<br />                .add(0, 300, Short.MAX_VALUE)<br />                );<br />        pack();<br />    }<br />    // &lt;/editor-fold&gt;                        <br />    <br />    /**<br />     * @param args the command line arguments<br />     */<br />    public static void main(String args[]) {<br />        FileEncrypter fe = new FileEncrypter();<br />        fe.show();<br />    }<br />    FileEncrypterT(){<br />        this.setSize(WIDTH,HEIGHT);<br />        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br />        this.setResizable(false);<br />        Toolkit tk = Toolkit.getDefaultToolkit();<br />        Dimension screenSize = tk.getScreenSize();<br />        this.setLocation((screenSize.width - WIDTH)/2,<br />                (screenSize.height - HEIGHT)/2);<br />        this.setTitle("文件加密器(TriDES)");<br />        Container c = this.getContentPane();<br />        c.setLayout( new FlowLayout());<br />        <br />        final FilePanel fp = new FilePanel("文件选择");<br />        c.add(fp);<br />        <br />        final KeyPanel pp = new KeyPanel("密码");<br />        c.add(pp);<br />        <br />        JButton jbE = new JButton("加密");<br />        c.add(jbE);<br />        jbE.addActionListener(new ActionListener(){<br />            public void actionPerformed(ActionEvent event){<br />                File file = new File(fp.getFileName());<br />                if (file.exists())<br />                    encrypt(file.getAbsoluteFile(),pp.getKey());<br />                else<br />                    JOptionPane.showMessageDialog(<br />                            null,"请选择文件！","提示",JOptionPane.OK_OPTION);<br />            }<br />        });<br />        JButton jbD = new JButton("解密");<br />        c.add(jbD);<br />        jbD.addActionListener(new ActionListener(){<br />            public void actionPerformed(ActionEvent event){<br />                File file = new File(fp.getFileName());<br />                if (file.exists())<br />                    decrypt(file.getAbsoluteFile(),pp.getKey());<br />                else<br />                    JOptionPane.showMessageDialog(<br />                            null,"请选择文件！","提示",JOptionPane.OK_OPTION);<br />            }<br />        });<br />    }<br />    <br />    /**<br />     * 加密函数<br />     * 输入：<br />     * 要加密的文件，密码（由0-F组成，共48个字符，表示3个8位的密码）如：<br />     * AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746<br />     * 其中：<br />     * AD67EA2F3BE6E5AD DES密码一<br />     * D368DFE03120B5DF DES密码二<br />     * 92A8FD8FEC2F0746 DES密码三<br />     * 输出：<br />     * 对输入的文件加密后，保存到同一文件夹下增加了".tdes"扩展名的文件中。<br />     */<br />    private void encrypt(File fileIn,String sKey){<br />        try{<br />            if(sKey.length() == 48){<br />                byte[] bytK1 = getKeyByStr(sKey.substring(0,16));<br />                byte[] bytK2 = getKeyByStr(sKey.substring(16,32));<br />                byte[] bytK3 = getKeyByStr(sKey.substring(32,48));<br />                <br />                FileInputStream fis = new FileInputStream(fileIn);<br />                byte[] bytIn = new byte[(int)fileIn.length()];<br />                for(int i = 0;i&lt;fileIn.length();i++){<br />                    bytIn[i] = (byte)fis.read();<br />                }<br />//加密<br />                byte[] bytOut = encryptByDES(encryptByDES(<br />                        encryptByDES(bytIn,bytK1),bytK2),bytK3);<br />                String fileOut = fileIn.getPath() + ".tdes";<br />                FileOutputStream fos = new FileOutputStream(fileOut);<br />                for(int i = 0;i&lt;bytOut.length;i++){<br />                    fos.write((int)bytOut[i]);<br />                }<br />                fos.close();<br />                JOptionPane.showMessageDialog(<br />                        this,"加密成功！","提示",JOptionPane.OK_OPTION);<br />            }else<br />                JOptionPane.showMessageDialog(<br />                        this,"密码长度必须等于48！","错误信息",JOptionPane.ERROR_MESSAGE);<br />        }catch(Exception e){<br />            e.printStackTrace();<br />        }<br />    }<br />    <br />    /**<br />     * 解密函数<br />     * 输入：<br />     * 要解密的文件，密码（由0-F组成，共48个字符，表示3个8位的密码）如：<br />     * AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746<br />     * 其中：<br />     * AD67EA2F3BE6E5AD DES密码一<br />     * D368DFE03120B5DF DES密码二<br />     * 92A8FD8FEC2F0746 DES密码三<br />     * 输出：<br />     * 对输入的文件解密后，保存到用户指定的文件中。<br />     */<br />    private void decrypt(File fileIn,String sKey){<br />        try{<br />            if(sKey.length() == 48){<br />                String strPath = fileIn.getPath();<br />                if(strPath.substring(strPath.length()-5).toLowerCase().equals(".tdes"))<br />                    strPath = strPath.substring(0,strPath.length()-5);<br />                else{<br />                    JOptionPane.showMessageDialog(<br />                            this,"不是合法的加密文件！","提示",JOptionPane.OK_OPTION);<br />                    return;<br />                }<br />                JFileChooser chooser = new JFileChooser();<br />                chooser.setCurrentDirectory(new File("."));<br />                chooser.setSelectedFile(new File(strPath));<br />//用户指定要保存的文件<br />                int ret = chooser.showSaveDialog(this);<br />                if(ret==JFileChooser.APPROVE_OPTION){<br />                    <br />                    byte[] bytK1 = getKeyByStr(sKey.substring(0,16));<br />                    byte[] bytK2 = getKeyByStr(sKey.substring(16,32));<br />                    byte[] bytK3 = getKeyByStr(sKey.substring(32,48));<br />                    <br />                    FileInputStream fis = new FileInputStream(fileIn);<br />                    byte[] bytIn = new byte[(int)fileIn.length()];<br />                    for(int i = 0;i&lt;fileIn.length();i++){<br />                        bytIn[i] = (byte)fis.read();<br />                    }<br />//解密<br />                    byte[] bytOut = decryptByDES(decryptByDES(<br />                            decryptByDES(bytIn,bytK3),bytK2),bytK1);<br />                    File fileOut = chooser.getSelectedFile();<br />                    fileOut.createNewFile();<br />                    FileOutputStream fos = new FileOutputStream(fileOut);<br />                    for(int i = 0;i&lt;bytOut.length;i++){<br />                        fos.write((int)bytOut[i]);<br />                    }<br />                    fos.close();<br />                    JOptionPane.showMessageDialog(<br />                            this,"解密成功！","提示",JOptionPane.OK_OPTION);<br />                }<br />            }else<br />                JOptionPane.showMessageDialog(<br />                        this,"密码长度必须等于48！","错误信息",JOptionPane.ERROR_MESSAGE);<br />        }catch(Exception e){<br />            JOptionPane.showMessageDialog(<br />                    this,"解密失败，请核对密码！","提示",JOptionPane.OK_OPTION);<br />        }<br />    }<br />    <br />    /**<br />     * 用DES方法加密输入的字节<br />     * bytKey需为8字节长，是加密的密码<br />     */<br />    private byte[] encryptByDES(byte[] bytP,byte[] bytKey) throws Exception{<br />        DESKeySpec desKS = new DESKeySpec(bytKey);<br />        SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");<br />        SecretKey sk = skf.generateSecret(desKS);<br />        Cipher cip = Cipher.getInstance("DES");<br />        cip.init(Cipher.ENCRYPT_MODE,sk);<br />        return cip.doFinal(bytP);<br />    }<br />    <br />    /**<br />     * 用DES方法解密输入的字节<br />     * bytKey需为8字节长，是解密的密码<br />     */<br />    private byte[] decryptByDES(byte[] bytE,byte[] bytKey) throws Exception{<br />        DESKeySpec desKS = new DESKeySpec(bytKey);<br />        SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");<br />        SecretKey sk = skf.generateSecret(desKS);<br />        Cipher cip = Cipher.getInstance("DES");<br />        cip.init(Cipher.DECRYPT_MODE,sk);<br />        return cip.doFinal(bytE);<br />    }<br />    <br />    /**<br />     * 输入密码的字符形式，返回字节数组形式。<br />     * 如输入字符串：AD67EA2F3BE6E5AD<br />     * 返回字节数组：{173,103,234,47,59,230,229,173}<br />     */<br />    private byte[] getKeyByStr(String str){<br />        byte[] bRet = new byte[str.length()/2];<br />        for(int i=0;i&lt;str.length()/2;i++){<br />            Integer itg =<br />                    new Integer(16*getChrInt(str.charAt(2*i)) + getChrInt(str.charAt(2*i+1)));<br />            bRet[i] = itg.byteValue();<br />        }<br />        return bRet;<br />    }<br />    /**<br />     * 计算一个16进制字符的10进制值<br />     * 输入：0-F<br />     */<br />    private int getChrInt(char chr){<br />        int iRet=0;<br />        if(chr=="0".charAt(0)) iRet = 0;<br />        if(chr=="1".charAt(0)) iRet = 1;<br />        if(chr=="2".charAt(0)) iRet = 2;<br />        if(chr=="3".charAt(0)) iRet = 3;<br />        if(chr=="4".charAt(0)) iRet = 4;<br />        if(chr=="5".charAt(0)) iRet = 5;<br />        if(chr=="6".charAt(0)) iRet = 6;<br />        if(chr=="7".charAt(0)) iRet = 7;<br />        if(chr=="8".charAt(0)) iRet = 8;<br />        if(chr=="9".charAt(0)) iRet = 9;<br />        if(chr=="A".charAt(0)) iRet = 10;<br />        if(chr=="B".charAt(0)) iRet = 11;<br />        if(chr=="C".charAt(0)) iRet = 12;<br />        if(chr=="D".charAt(0)) iRet = 13;<br />        if(chr=="E".charAt(0)) iRet = 14;<br />        if(chr=="F".charAt(0)) iRet = 15;<br />        return iRet;<br />    }<br />    // Variables declaration - do not modify                     <br />    // End of variables declaration                   <br />    <br />}</font>
		</div>
		<div>
				<font color="#0000ff">/**<br /> * 文件选择组件。<br /> */<br />class FilePanel extends JPanel{<br />    FilePanel(String str){<br />        JLabel label = new JLabel(str);<br />        JTextField fileText = new JTextField(35);<br />        JButton chooseButton = new JButton("浏览...");<br />        this.add(label);<br />        this.add(fileText);<br />        this.add(chooseButton);<br />        clickAction ca = new clickAction(this);<br />        chooseButton.addActionListener(ca);<br />        <br />    }<br />    <br />    public String getFileName(){<br />        JTextField jtf = (JTextField)this.getComponent(1);<br />        return jtf.getText();<br />    }<br />    <br />    private class clickAction implements ActionListener{<br />        clickAction(Component c){<br />            cmpt = c;<br />        }<br />        <br />        public void actionPerformed(ActionEvent event){<br />            JFileChooser chooser = new JFileChooser();<br />            chooser.setCurrentDirectory(new File("."));<br />            int ret = chooser.showOpenDialog(cmpt);<br />            if(ret==JFileChooser.APPROVE_OPTION){<br />                JPanel jp = (JPanel)cmpt;<br />                JTextField jtf = (JTextField)jp.getComponent(1);<br />                jtf.setText(chooser.getSelectedFile().getPath());<br />            }<br />        }<br />        <br />        private Component cmpt;<br />    }<br />}</font>
		</div>
		<div>
				<font color="#0000ff">/**<br /> * 密码生成组件。<br /> */<br />class KeyPanel extends JPanel{<br />    KeyPanel(String str){<br />        JLabel label = new JLabel(str);<br />        JTextField fileText = new JTextField(35);<br />        JButton chooseButton = new JButton("随机产生");<br />        this.add(label);<br />        this.add(fileText);<br />        this.add(chooseButton);<br />        clickAction ca = new clickAction(this);<br />        chooseButton.addActionListener(ca);<br />        <br />    }<br />    <br />//返回生成的密码（48个字符长度）<br />    public String getKey(){<br />        JTextField jtf = (JTextField)this.getComponent(1);<br />        return jtf.getText();<br />    }<br />    <br />    private class clickAction implements ActionListener{<br />        clickAction(Component c){<br />            cmpt = c;<br />        }<br />        <br />        public void actionPerformed(ActionEvent event){<br />            try{<br />                KeyGenerator kg = KeyGenerator.getInstance("DES");<br />                kg.init(56);<br />                Key ke = kg.generateKey();<br />                byte[] bytK1 = ke.getEncoded();<br />                ke = kg.generateKey();<br />                byte[] bytK2 = ke.getEncoded();<br />                ke = kg.generateKey();<br />                byte[] bytK3 = ke.getEncoded();<br />                <br />                JPanel jp = (JPanel)cmpt;<br />                JTextField jtf = (JTextField)jp.getComponent(1);<br />                jtf.setText(getByteStr(bytK1)+getByteStr(bytK2)+getByteStr(bytK3));<br />            }catch(Exception e){<br />                e.printStackTrace();<br />            }<br />        }<br />        <br />        private String getByteStr(byte[] byt){<br />            String strRet = "";<br />            for(int i=0;i&lt;byt.length;i++){<br />//System.out.println(byt[i]);<br />                strRet += getHexValue((byt[i]&amp;240)/16);<br />                strRet += getHexValue(byt[i]&amp;15);<br />            }<br />            return strRet;<br />        }<br />        <br />        private String getHexValue(int s){<br />            String sRet=null;<br />            switch (s){<br />                case 0: sRet = "0";break;<br />                case 1: sRet = "1";break;<br />                case 2: sRet = "2";break;<br />                case 3: sRet = "3";break;<br />                case 4: sRet = "4";break;<br />                case 5: sRet = "5";break;<br />                case 6: sRet = "6";break;<br />                case 7: sRet = "7";break;<br />                case 8: sRet = "8";break;<br />                case 9: sRet = "9";break;<br />                case 10: sRet = "A";break;<br />                case 11: sRet = "B";break;<br />                case 12: sRet = "C";break;<br />                case 13: sRet = "D";break;<br />                case 14: sRet = "E";break;<br />                case 15: sRet = "F";<br />            }<br />            return sRet;<br />        }<br />        <br />        private Component cmpt;<br />    }<br />}<br /></font>
		</div>
		<br />
		<br />
		<img src="http://www.zhanglihai.com/data/uploadfiles//200502/25/tvxgiihj_1109296469805.jpg" />
		<br />
		<br />摘自：<a href="http://dev.csdn.net/article/article/63/63304.shtm" target="_blank">http://dev.csdn.net/article/article/63/63304.shtm</a><br /><img src ="http://www.blogjava.net/myblogs/aggbug/55685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/myblogs/" target="_blank">程序-人生</a> 2006-06-29 10:19 <a href="http://www.blogjava.net/myblogs/archive/2006/06/29/55685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate之 对象/关系数据库映射基础(Basic O/R Mapping)</title><link>http://www.blogjava.net/myblogs/archive/2006/06/28/55539.html</link><dc:creator>程序-人生</dc:creator><author>程序-人生</author><pubDate>Wed, 28 Jun 2006 06:37:00 GMT</pubDate><guid>http://www.blogjava.net/myblogs/archive/2006/06/28/55539.html</guid><wfw:comment>http://www.blogjava.net/myblogs/comments/55539.html</wfw:comment><comments>http://www.blogjava.net/myblogs/archive/2006/06/28/55539.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/myblogs/comments/commentRss/55539.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/myblogs/services/trackbacks/55539.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 6.1. 映射定义（Mapping declaration）																																		对象和关系数据库之间的映射通常是用一个XML文档(XML document)来定义的。这个映射文档被设计为易读的， 并且可以手工修改。映射语言是以Java为中心，这意味着映射文档是按照持久化类的定义来创建的， 而非表的定义。 				请注意，虽...&nbsp;&nbsp;<a href='http://www.blogjava.net/myblogs/archive/2006/06/28/55539.html'>阅读全文</a><img src ="http://www.blogjava.net/myblogs/aggbug/55539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/myblogs/" target="_blank">程序-人生</a> 2006-06-28 14:37 <a href="http://www.blogjava.net/myblogs/archive/2006/06/28/55539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts快速学习指南</title><link>http://www.blogjava.net/myblogs/archive/2006/06/28/55536.html</link><dc:creator>程序-人生</dc:creator><author>程序-人生</author><pubDate>Wed, 28 Jun 2006 06:22:00 GMT</pubDate><guid>http://www.blogjava.net/myblogs/archive/2006/06/28/55536.html</guid><wfw:comment>http://www.blogjava.net/myblogs/comments/55536.html</wfw:comment><comments>http://www.blogjava.net/myblogs/archive/2006/06/28/55536.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/myblogs/comments/commentRss/55536.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/myblogs/services/trackbacks/55536.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Struts快速学习指南 素材来自于《Programming Jakarta Struts》一书   1.     Struts简介Struts 是一个技术框架，由Craig R. McClanahan编写，并且在2000年的时候捐献给了ASF，目前，有很多组织和个人参与Struts框架的开发，使得Struts保持高速成长，同时，利用Struts开发的应用越来越多，使其成为web应用MVC模式中V...&nbsp;&nbsp;<a href='http://www.blogjava.net/myblogs/archive/2006/06/28/55536.html'>阅读全文</a><img src ="http://www.blogjava.net/myblogs/aggbug/55536.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/myblogs/" target="_blank">程序-人生</a> 2006-06-28 14:22 <a href="http://www.blogjava.net/myblogs/archive/2006/06/28/55536.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FCKeditor在线编辑器的使用</title><link>http://www.blogjava.net/myblogs/archive/2006/06/28/55533.html</link><dc:creator>程序-人生</dc:creator><author>程序-人生</author><pubDate>Wed, 28 Jun 2006 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/myblogs/archive/2006/06/28/55533.html</guid><wfw:comment>http://www.blogjava.net/myblogs/comments/55533.html</wfw:comment><comments>http://www.blogjava.net/myblogs/archive/2006/06/28/55533.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/myblogs/comments/commentRss/55533.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/myblogs/services/trackbacks/55533.html</trackback:ping><description><![CDATA[1.下载<br />FCKeditor.java 2.3 (FCKeditot for java)<br />FCKeditor 2.2 (FCKeditor基本文件)
<p>2.建立项目:tomcat/webapps/TestFCKeditor.</p><p>3.将FCKeditor2.2解压缩,将整个目录FCKeditor复制到项目的根目录下，<br />目录结构为：tomcat/webapps/TestFCKeditor/FCKeditor<br />然后将FCKeditor-2.3.zip（java）压缩包中\web\WEB-INF\lib\目录下的两个jar文件拷到项目的\WEB-INF\lib\目录下。把其中的src目录下的FCKeditor.tld文件copy到TestFCKedit/FCKeitor/WEB-INF/下</p><p>4.将FCKeditor-2.3.zip压缩包中\web\WEB-INF\目录下的web.xml文件合并到项目的\WEB-INF\目录下的web.xml文件中。</p><p>5. 修改合并后的web.xml文件，将名为SimpleUploader的Servlet的enabled参数值改为true，<br />以允许上传功能，Connector Servlet的baseDir参数值用于设置上传文件存放的位置。<br />添加标签定义:<br />&lt;taglib&gt;<br />&lt;taglib-uri&gt;/TestFCKeditor&lt;/taglib-uri&gt;<br />&lt;taglib-location&gt;/WEB-INF/FCKeditor.tld&lt;/taglib-location&gt;<br />&lt;/taglib&gt;<br /></p><p>6. 上面文件中两个servlet的映射分别为：/editor/filemanager/browser/default/connectors/jsp/connector<br />和/editor/filemanager/upload/simpleuploader，需要在两个映射前面加上/FCKeditor，<br />即改为/FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector和<br />/FCKeditor/editor/filemanager/upload/simpleuploader。</p><p>7.进入skin文件夹，如果你想使用fckeditor默认的这种奶黄色，<br />那就把除了default文件夹外的另两个文件夹直接删除.</p><p>8.删除/FCKeditor/目录下除fckconfig.js, fckeditor.js, fckstyles.xml, fcktemplates.xml四个文件以外的所有文件 <br />删除目录/editor/_source,<br />删除/editor/filemanager/browser/default/connectors/下的所有文件<br />删除/editor/filemanager/upload/下的所有文件<br />删除/editor/lang/下的除了fcklanguagemanager.js, en.js, zh.js, zh-cn.js四个文件的所有文件</p><p>9.打开/FCKeditor/fckconfig.js<br />修改 FCKConfig.DefaultLanguage = 'zh-cn' ; <br />把FCKConfig.LinkBrowserURL等的值替换成以下内容：<br />FCKConfig.LinkBrowserURL<br />= FCKConfig.BasePath + "filemanager/browser/default/browser.html?Connector=connectors/jsp/connector" ;<br /><br />FCKConfig.ImageBrowserURL<br />= FCKConfig.BasePath + "filemanager/browser/default/browser.html?Type=Image&amp;Connector=connectors/jsp/connector" ;<br /><br />FCKConfig.FlashBrowserURL<br />= FCKConfig.BasePath + "filemanager/browser/default/browser.html?Type=Flash&amp;Connector=connectors/jsp/connector" ;</p><p><br />FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=File' ;<br />FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=Flash' ;<br />FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=Image' ;<br /></p><p>10.其它<br />fckconfig.js总配置文件，可用记录本打开，修改后将文件存为utf-8 编码格式。找到：</p><p>FCKConfig.TabSpaces = 0 ; 改为FCKConfig.TabSpaces = 1 ; 即在编辑器域内可以使用Tab键。</p><p>如果你的编辑器还用在网站前台的话，比如说用于留言本或是日记回复时，那就不得不考虑安全了，<br />在前台千万不要使用Default的toolbar，要么自定义一下功能，要么就用系统已经定义好的Basic，<br />也就是基本的toolbar，找到：<br />FCKConfig.ToolbarSets["Basic"] = [<br />['Bold','Italic','-','OrderedList','UnorderedList','-',/*'Link',*/'Unlink','-','Style','FontSize','TextColor','BGColor','-',<br />'Smiley','SpecialChar','Replace','Preview'] ] ;<br />这是改过的Basic，把图像功能去掉，把添加链接功能去掉，因为图像和链接和flash和图像按钮添加功能都能让前台<br />页直接访问和上传文件， fckeditor还支持编辑域内的鼠标右键功能。<br /><br />FCKConfig.ContextMenu = ['Generic',/*'Link',*/'Anchor',/*'Image',*/'Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField',<br />/*'ImageButton',*/'Button','BulletedList','NumberedList','TableCell','Table','Form'] ;<br /><br />这也是改过的把鼠标右键的“链接、图像，FLASH，图像按钮”功能都去掉。</p><p>　　找到： FCKConfig.FontNames = 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;<br />加上几种我们常用的字体 <br />FCKConfig.FontNames <br />= '宋体;黑体;隶书;楷体_GB2312;Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;<br /><br />7、添加页面<br /><br />&lt;%@ page language="java" import="com.fredck.FCKeditor.*" %&gt;<br />&lt;%@ taglib uri="/WEB-INF/tlds/FCKeditor.tld" prefix="FCK" %&gt;<br />&lt;script type="text/javascript" src="FCKeditor/fckeditor.js"&gt;&lt;/script&gt;</p><p>&lt;form action="show.jsp" method="post" target="_blank"&gt;<br />&lt;table border="0" width="700"&gt;&lt;tr&gt;&lt;td&gt;<br />&lt;textarea id="content" name="content" style="WIDTH: 100%; HEIGHT: 400px"&gt;input&lt;/textarea&gt;<br />&lt;script type="text/javascript"&gt;<br />var oFCKeditor = new FCKeditor('content') ;<br />oFCKeditor.BasePath = "FCKeditor/" ;<br />oFCKeditor.Height = 400;<br />oFCKeditor.ToolbarSet = "Default" ; <br />oFCKeditor.ReplaceTextarea();<br />&lt;/script&gt;<br />&lt;input type="submit" value="Submit"&gt;<br />&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;<br />&lt;/form&gt;<br /><br />编辑web.xml 文集 添加 如下片断<br /><br /> &lt;servlet&gt;<br />  &lt;servlet-name&gt;SimpleUploader&lt;/servlet-name&gt;<br />  &lt;servlet-class&gt;com.fredck.FCKeditor.uploader.SimpleUploaderServlet&lt;/servlet-class&gt;<br />  &lt;init-param&gt;<br />   &lt;param-name&gt;baseDir&lt;/param-name&gt;<br />   &lt;param-value&gt;/UserFiles/&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;init-param&gt;<br />   &lt;param-name&gt;debug&lt;/param-name&gt;<br />   &lt;param-value&gt;true&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;init-param&gt;<br />   &lt;param-name&gt;enabled&lt;/param-name&gt;<br />   &lt;param-value&gt;false&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;init-param&gt;<br />   &lt;param-name&gt;AllowedExtensionsFile&lt;/param-name&gt;<br />   &lt;param-value&gt;&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;init-param&gt;<br />   &lt;param-name&gt;DeniedExtensionsFile&lt;/param-name&gt;<br />   &lt;param-value&gt;php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;init-param&gt;<br />   &lt;param-name&gt;AllowedExtensionsImage&lt;/param-name&gt;<br />   &lt;param-value&gt;jpg|gif|jpeg|png|bmp&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;init-param&gt;<br />   &lt;param-name&gt;DeniedExtensionsImage&lt;/param-name&gt;<br />   &lt;param-value&gt;&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;init-param&gt;<br />   &lt;param-name&gt;AllowedExtensionsFlash&lt;/param-name&gt;<br />   &lt;param-value&gt;swf|fla&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;init-param&gt;<br />   &lt;param-name&gt;DeniedExtensionsFlash&lt;/param-name&gt;<br />   &lt;param-value&gt;&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br /> &lt;/servlet&gt;</p><p>  &lt;servlet-mapping&gt;<br />    &lt;servlet-name&gt;Connector&lt;/servlet-name&gt;<br />    &lt;url-pattern&gt;/FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector&lt;/url-pattern&gt;<br />  &lt;/servlet-mapping&gt;<br />  <br />  &lt;servlet-mapping&gt;<br />    &lt;servlet-name&gt;SimpleUploader&lt;/servlet-name&gt;<br />    &lt;url-pattern&gt;/FCKeditor/editor/filemanager/upload/simpleuploader&lt;/url-pattern&gt;<br />  &lt;/servlet-mapping&gt;  <br /><br /><br /><br /> &lt;taglib&gt;<br /> &lt;taglib-uri&gt;/WEB-INF/FCKeditor.tld&lt;/taglib-uri&gt;<br /> &lt;taglib-location&gt;/WEB-INF/tlds/FCKeditor.tld&lt;/taglib-location&gt;<br /> &lt;/taglib&gt;<br /><br />OK！</p><img src ="http://www.blogjava.net/myblogs/aggbug/55533.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/myblogs/" target="_blank">程序-人生</a> 2006-06-28 14:15 <a href="http://www.blogjava.net/myblogs/archive/2006/06/28/55533.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>表单相关特效整理</title><link>http://www.blogjava.net/myblogs/archive/2006/06/28/55530.html</link><dc:creator>程序-人生</dc:creator><author>程序-人生</author><pubDate>Wed, 28 Jun 2006 05:55:00 GMT</pubDate><guid>http://www.blogjava.net/myblogs/archive/2006/06/28/55530.html</guid><wfw:comment>http://www.blogjava.net/myblogs/comments/55530.html</wfw:comment><comments>http://www.blogjava.net/myblogs/archive/2006/06/28/55530.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/myblogs/comments/commentRss/55530.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/myblogs/services/trackbacks/55530.html</trackback:ping><description><![CDATA[
		<p>ENTER键可以让光标移到下一个输入框 <br />&lt;input onkeydown="if(event.keyCode==13)event.keyCode=9" &gt; &lt;br&gt;</p>
		<p>只能是中文&lt;input onkeyup="value=value.replace(/[ -~]/g,'')" onkeydown="if(event.keyCode==13)event.keyCode=9"&gt; &lt;br&gt;</p>
		<p>屏蔽输入法&lt;input style="ime-mode:disabled" onkeydown="if(event.keyCode==13)event.keyCode=9"&gt; &lt;br&gt;</p>
		<p>只能输入英文和数字&lt;input onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" onkeydown="if(event.keyCode==13)event.keyCode=9"&gt; &lt;br&gt;</p>
		<p>只能是数字&lt;input onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"&gt;&lt;br&gt;</p>
		<p>只能显示，不能修改&lt;input readonly value="只能显示，不能修改"&gt;</p>
		<p>
				<br />只能是数字，判断按键的值。<br />&lt;script  language=javascript&gt;<br />function  onlyNum()<br />{<br />if(!((event.keyCode&gt;=48&amp;&amp;event.keyCode&lt;=57)||(event.keyCode&gt;=96&amp;&amp;event.keyCode&lt;=105)||(event.keyCode==8)))<br />event.returnValue=false;<br />}<br />&lt;/script&gt;<br />&lt;input  onkeydown="onlyNum();"&gt;  </p>
		<p>
				<br />获取键盘的KeyCode</p>
		<p>&lt;html&gt;<br />&lt;head&gt;<br />&lt;script language="javascript"&gt;<br />  ns4 = (document.layers) ? true : false;<br />  ie4 = (document.all) ? true : false;<br />function keyDown(e){<br />  if(ns4){<br />  var nkey=e.which;<br />  var iekey='现在是ns浏览器';<br />  var realkey=String.fromCharCode(e.which);<br />}<br />  if(ie4){<br />  var iekey=event.keyCode;<br />  var nkey='现在是ie浏览器';<br />  var realkey=String.fromCharCode(event.keyCode);<br />  if(event.keyCode==32){realkey='\' 空格\''}<br />  if(event.keyCode==13){realkey='\' 回车\''}<br />  if(event.keyCode==27){realkey='\' Esc\''}<br />  if(event.keyCode==16){realkey='\' Shift\''}<br />  if(event.keyCode==17){realkey='\' Ctrl\''}<br />  if(event.keyCode==18){realkey='\' Alt\''}<br />}<br />  alert('ns浏览器中键值:'+nkey+'\n'+'ie浏览器中键值:'+iekey+'\n'+'实际键为'+realkey);<br />}<br />document.onkeydown = keyDown;<br />if(ns4){<br />document.captureEvents(Event.KEYDOWN);}<br />&lt;/script&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />//Javascript Document.<br />&lt;hr&gt;<br />&lt;center&gt;<br />&lt;h3&gt;请按任意一个键。。。。&lt;/h3&gt;<br />&lt;/center&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
		<p>限制网页用键盘</p>
		<p>&lt;body onkeydown="alert('禁用');return false;"&gt;<br />限制键盘的某个键：body onkeydown="if(event.keyCode==num){alert('禁用');return false;}</p>
		<p>再加个找按键的值</p>
		<p>&lt;script&gt;<br />function show(){<br />  alert("ASCII代码是："+event.keyCode);<br />}<br />&lt;/script&gt;<br />&lt;body onkeydown="show()"&gt;</p>
		<p>只能是IP地址</p>
		<p>&lt;html&gt;</p>
		<p>&lt;head&gt;<br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />&lt;meta name="GENERATOR" content="Microsoft FrontPage 4.0"&gt;<br />&lt;meta name="ProgId" content="FrontPage.Editor.Document"&gt;<br />&lt;style&gt;<br />.a3{width:30;border:0;text-align:center}<br />&lt;/style&gt;<br />&lt;script&gt;<br />function mask(obj){<br />obj.value=obj.value.replace(/[^\d]/g,'')<br />key1=event.keyCode<br />if (key1==37 || key1==39)<br />{ obj.blur();<br />nextip=parseInt(obj.name.substr(2,1))<br />nextip=key1==37?nextip-1:nextip+1;<br />nextip=nextip&gt;=5?1:nextip<br />nextip=nextip&lt;=0?4:nextip<br />eval("ip"+nextip+".focus()")<br />} <br />if(obj.value.length&gt;=3) <br />if(parseInt(obj.value)&gt;=256 || parseInt(obj.value)&lt;=0)<br />{<br />alert(parseInt(obj.value)+"IP地址错误！")<br />obj.value=""<br />obj.focus()<br />return false;<br />}<br />else <br />{ obj.blur();<br />nextip=parseInt(obj.name.substr(2,1))+1<br />nextip=nextip&gt;=5?1:nextip<br />nextip=nextip&lt;=0?4:nextip<br />eval("ip"+nextip+".focus()")<br />}<br />}<br />function mask_c(obj)<br />{<br />clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))<br />}</p>
		<p>&lt;/script&gt;<br />&lt;title&gt;IP地址输入&lt;/title&gt;</p>
		<p>&lt;/head&gt;<br />&lt;body&gt;IP地址输入<br />&lt;div style="border-width:1;border-color:balck;border-style:solid;width:165;font-size:9pt"&gt;<br />&lt;input type=text name=ip1 maxlength=3 class=a3 onkeyup="mask(this)" onbeforepaste=mask_c()&gt;.<br />&lt;input type=text name=ip2 maxlength=3 class=a3 onkeyup="mask(this)" onbeforepaste=mask_c()&gt;.<br />&lt;input type=text name=ip3 maxlength=3 class=a3 onkeyup="mask(this)" onbeforepaste=mask_c()&gt;.<br />&lt;input type=text name=ip4 maxlength=3 class=a3 onkeyup="mask(this)" onbeforepaste=mask_c()&gt;<br />&lt;/div&gt;<br />&lt;/body&gt;</p>
		<p>用#default#savehistory防止后退清空text文本框： </p>
		<p>&lt;HTML&gt;<br />&lt;HEAD&gt;<br />&lt;META NAME="save" CONTENT="history"&gt;<br />&lt;STYLE&gt;<br />  .saveHistory {behavior:url(#default#savehistory);}<br />&lt;/STYLE&gt;<br />&lt;/HEAD&gt;<br />&lt;BODY&gt;<br />&lt;INPUT class=saveHistory type=text id=oPersistInput&gt;<br />&lt;input type=button onclick='javascript:location.href="<a href="http://www.cnbruce.com/red/&quot;'">http://www.cnbruce.com/red/"'</a> value='点击进入,再按后退键试试？'&gt;<br />&lt;/BODY&gt;<br />&lt;/HTML&gt;</p>
		<p>
				<br />TEXTAREA自适应文字行数的多少</p>
		<p>&lt;textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight"&gt; </p>
		<p>上传预览图片</p>
		<p>&lt;img id=pic  src=http://www.cnbruce.com/images/logo.gif&gt;<br />&lt;input type=file name=file&gt;&lt;input type=button onclick=pic.src=file.value value=预览图片&gt;<br />&lt;input type=button onclick=alert(file.value) value=图片地址&gt;<br />&lt;input type=button onclick="file.outerHTML=file.outerHTML.replace(/value=\w/g,'')" value="清除file里字"&gt;</p>
		<p>去掉下拉选项的边框<br />&lt;div style="position: absolute; left: 10px; top: 10px; width: 115px; height: 20px;  clip:rect(2 114 20 2);"&gt; <br />   &lt;select&gt;<br />    &lt;option &gt;cnpeople&lt;/option&gt;<br />    &lt;option &gt;cnrose&lt;/option&gt;<br />   &lt;option &gt;cnbruce&lt;/option&gt;  <br />  &lt;/select&gt;<br />  &lt;/font&gt;<br />&lt;/div&gt;</p>
		<p>下拉列表打开窗口<br />&lt;select  onChange="if(this.selectedIndex &amp;&amp; this.selectedIndex!=0){window.open(this.value);}this.selectedIndex=0;"&gt;<br />&lt;option selected&gt;更多链接……&lt;/option&gt;<br />&lt;option value="<a href="http://www.cnbruce.com&quot;&gt;cnbruce&lt;/option">http://www.cnbruce.com"&gt;cnbruce&lt;/option</a>&gt;<br />&lt;option value="<a href="http://daonet.myrice.com/old/&quot;&gt;daonet&lt;/option">http://daonet.myrice.com/old/"&gt;daonet&lt;/option</a>&gt;<br />&lt;option value="<a href="http://www.blueidea.com&quot;&gt;blue!dea">http://www.blueidea.com"&gt;blue!dea</a><br />&lt;/select&gt;</p>
		<p>
				<br />通过下拉菜单传递跳转</p>
		<p>&lt;form action="showlog.asp?" &gt;<br />&lt;select name="cat_id" onpropertychange="form.submit();"&gt;<br />&lt;option value=""&gt;==请选择==&lt;/option&gt;<br />&lt;option value="11"&gt;11&lt;/option&gt;<br />&lt;option value="22"&gt;22&lt;/option&gt;<br />&lt;/select&gt;<br />&lt;/form&gt;</p>
		<p>
				<br />TAB键在文本域中的体现</p>
		<p>&lt;script&gt;<br />function editTab()<br />{<br />    var code, sel, tmp, r<br />    var tabs=""<br />    event.returnValue = false<br />    sel =event.srcElement.document.selection.createRange()<br />    r = event.srcElement.createTextRange()</p>
		<p>    switch (event.keyCode)<br />    {<br />        case (8)    :<br />            if (!(sel.getClientRects().length &gt; 1))<br />            {<br />                event.returnValue = true<br />                return<br />            }<br />            code = sel.text<br />            tmp = sel.duplicate()<br />            tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top)<br />            sel.setEndPoint("startToStart", tmp)<br />            sel.text = sel.text.replace(/^\t/gm, "")<br />            code = code.replace(/^\t/gm, "").replace(/\r\n/g, "\r")<br />            r.findText(code)<br />            r.select()<br />            break<br />        case (9)    :<br />            if (sel.getClientRects().length &gt; 1)<br />            {<br />                code = sel.text<br />                tmp = sel.duplicate()<br />                tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top)<br />                sel.setEndPoint("startToStart", tmp)<br />                sel.text = "\t"+sel.text.replace(/\r\n/g, "\r\t")<br />                code = code.replace(/\r\n/g, "\r\t")<br />                r.findText(code)<br />                r.select()<br />            }<br />            else<br />            {<br />                sel.text = "\t"<br />                sel.select()<br />            }<br />            break<br />        case (13)    :<br />            tmp = sel.duplicate()<br />            tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top)<br />            tmp.setEndPoint("endToEnd", sel)</p>
		<p>            for (var i=0; tmp.text.match(/^[\t]+/g) &amp;&amp; i&lt;tmp.text.match(/^[\t]+/g)[0].length; i++)    tabs += "\t"<br />            sel.text = "\r\n"+tabs<br />            sel.select()<br />            break<br />        default        :<br />            event.returnValue = true<br />            break<br />    }<br />}<br />&lt;/script&gt;</p>
		<p>&lt;textarea cols=75 rows=20 onkeydown="editTab()"&gt;<br />&lt;script&gt;<br />alert("ok")<br />&lt;/script&gt;&lt;/textarea&gt;</p>
		<p>文本框的上/下拉</p>
		<p>form name="cnbruce"&gt;<br />&lt;textarea name="com"&gt;<br />&lt;/textarea&gt;<br />&lt;/form&gt;<br />&lt;SPAN title='放大输入框' style='FONT-SIZE: 12px; CURSOR: hand'  onclick=document.cnbruce.com.rows+=4&gt;向下&lt;/SPAN&gt;<br /> &lt;SPAN title='缩小输入框' style='FONT-SIZE: 12px; CURSOR: hand' class='arrow' onclick='if(document.cnbruce.com.rows&gt;=4)document.cnbruce.com.rows-=4;else return false'&gt;向上&lt;/SPAN&gt;</p>
		<p>
				<br />一个复选框，点击之后一组复选框全部都选上</p>
		<p>&lt;input type="checkbox" name="checkA" onpropertychange="for(i=0;i&lt;A.children.length;i++){A.children[i].checked=this.checked}"&gt;a<br />&lt;br&gt;<br />&lt;span id="A"&gt;<br />&lt;input type="checkbox" name="A1"&gt;<br />&lt;input type="checkbox" name="A2"&gt;<br />&lt;input type="checkbox" name="A3"&gt;<br />&lt;/span&gt;</p>
		<p>Debug Textarea：在线写 js 脚本的时候，用来即时查错的东西！</p>
		<p>&lt;HTML&gt;<br />&lt;HEAD&gt;<br />&lt;TITLE&gt;Debug Textarea&lt;/TITLE&gt;<br />&lt;meta http-equiv='Content-Type' content='text/html; charset=gb2312'&gt;<br />&lt;/HEAD&gt;<br />&lt;style&gt;<br />* {<br />    font-size: 12px<br />}<br />body {<br />    margin: 10px; padding: 0px<br />}<br />table.list{<br />    cursor: default;<br />    border:1px solid #cccccc<br />    background-color: #cccccc;<br />    border-collapse: collapse;<br />    border-Color: #cccccc;<br />}<br />&lt;/style&gt;<br />&lt;script language="javascript"&gt;<br />// Coded by windy_sk &lt;<a href="mailto:windy_sk@126.com">windy_sk@126.com</a>&gt; 20040205</p>
		<p>function reportError(msg,url,line) {<br />    var str = "You have found an error as below: \n\n";<br />    str += "Err: " + msg + " on line: " + line;<br />    alert(str);<br />    return true;<br />}</p>
		<p>window.onerror = reportError;</p>
		<p>
				<br />document.onkeydown = function() {<br />    if(event.ctrlKey){<br />        switch(event.keyCode) {<br />            case 82: //r<br />                runcode();<br />                break;<br />            case 83: //s<br />                savecode();<br />                break;<br />            case 71: //g<br />                goto(prompt('Please input the line number', '1'));<br />                break;<br />            case 65: //a<br />                document.execCommand("SelectAll");<br />                break;<br />            case 67: //c<br />                document.execCommand("Copy");<br />                break;<br />            case 88: //x<br />                document.execCommand("Cut");<br />                break;<br />            case 86: //v<br />                document.execCommand("Paste");<br />                break;<br />            case 90: //z<br />                document.execCommand("Undo");<br />                break;<br />            case 89: //y<br />                document.execCommand("Redo");<br />                break;<br />            default:<br />                break;<br />        }<br />        event.keyCode = 0;<br />        event.returnValue = false;<br />    }<br />    return;<br />}</p>
		<p>
				<br />function show_ln(){<br />    var txt_ln     = document.getElementById('txt_ln');<br />    var txt_main     = document.getElementById('txt_main');<br />    txt_ln.scrollTop = txt_main.scrollTop;<br />    while(txt_ln.scrollTop != txt_main.scrollTop) {<br />        txt_ln.value += (i++) + '\n';<br />        txt_ln.scrollTop = txt_main.scrollTop;<br />    }<br />    return;<br />}</p>
		<p>
				<br />function editTab(){<br />    var code, sel, tmp, r<br />    var tabs=''<br />    event.returnValue = false<br />    sel =event.srcElement.document.selection.createRange()<br />    r = event.srcElement.createTextRange()</p>
		<p>    switch (event.keyCode){<br />        case (8)    :<br />            if (!(sel.getClientRects().length &gt; 1)){<br />                event.returnValue = true<br />                return<br />            }<br />            code = sel.text<br />            tmp = sel.duplicate()<br />            tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top)<br />            // 出错检验代码~~~~~~<br />            if(sel.parentElement() != tmp.parentElement()) return;<br />            sel.setEndPoint('startToStart', tmp)<br />            sel.text = sel.text.replace(/^\t/gm, '')<br />            code = code.replace(/^\t/gm, '').replace(/\r\n/g, '\r')<br />            r.findText(code)<br />            r.select()<br />            break<br />        case (9)    :<br />            if (sel.getClientRects().length &gt; 1){<br />                code = sel.text<br />                tmp = sel.duplicate()<br />                tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top)<br />                // 出错检验代码~~~~~~<br />                if(sel.parentElement() != tmp.parentElement()) return;<br />                sel.setEndPoint('startToStart', tmp)<br />                sel.text = '\t'+sel.text.replace(/\r\n/g, '\r\t')<br />                code = code.replace(/\r\n/g, '\r\t')<br />                r.findText(code)<br />                r.select()<br />            }else{<br />                sel.text = '\t'<br />                sel.select()<br />            }<br />            break<br />        case (13)    :<br />            tmp = sel.duplicate()<br />            tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top)<br />            // 出错检验代码~~~~~~<br />            if(sel.parentElement() != tmp.parentElement()) return;<br />            tmp.setEndPoint('endToEnd', sel)<br />            for (var i=0; tmp.text.match(/^[\t]+/g) &amp;&amp; i&lt;tmp.text.match(/^[\t]+/g)[0].length; i++)    tabs += '\t'<br />            sel.text = '\r\n'+tabs<br />            sel.select()<br />            break<br />        default        :<br />            event.returnValue = true<br />            break;<br />    }<br />    return;<br />}</p>
		<p>
				<br />function runcode() {<br />    var str = document.getElementById("txt_main").value;<br />    var code_win = window.open('about:blank');<br />    code_win.document.open();<br />    code_win.document.writeln("&lt;script&gt;");<br />    code_win.document.writeln("function reportError(msg,url,line){\nline-=14;\nvar str='You have found an error as below: <a href="file://\\n\\n';\nstr+='Err">\\n\\n';\nstr+='Err</a>: '+msg+' on line: '+(line);\nalert(str);\nopener.goto(line);\nopener.focus();\nwindow.onerror=null;\nsetTimeout('self.close()',10);\nreturn true;\n}");<br />    code_win.document.writeln("window.onerror = reportError;");<br />    code_win.document.writeln("&lt;\/script&gt;");<br />    code_win.document.writeln(str);<br />    code_win.document.close();<br />    return;<br />}</p>
		<p>
				<br />function savecode() {<br />    var str = document.getElementById("txt_main").value;<br />    var code_win = window.open('about:blank','_blank','top=10000');<br />    code_win.document.open();<br />    code_win.document.writeln(str);<br />    code_win.document.close();<br />    code_win.document.execCommand('saveas','','code.html');<br />    code_win.close();<br />    return;<br />}</p>
		<p>
				<br />function goto(ln) {<br />    if(!/^\d+$/.test(ln)) return;<br />    var obj = document.getElementById("txt_main");<br />    var rng = obj.createTextRange();<br />    var arr = obj.value.replace(/\r/, "").split(/\n/);<br />    if(ln&gt;arr.length) ln = arr.length;<br />    var str_tmp = "";<br />    for(var i=0; i&lt;ln-1; i++) {<br />        str_tmp += arr[i];<br />    }<br />    rng.moveStart('character',str_tmp.length+1);<br />    str_tmp = "";<br />    for(i=ln; i&lt;arr.length; i++) {<br />        str_tmp += arr[i];<br />    }<br />    rng.moveEnd('character',-str_tmp.length); <br />    rng.select();<br />    return;<br />}</p>
		<p>window.onload = function() {document.getElementById("txt_main").value = "&lt;script&gt;\nalert(')\n&lt;\/script&gt;";}<br />&lt;/script&gt;<br />&lt;BODY&gt;<br />&lt;table width='600' class='list' border='1' bgcolor='#eeeeee' bordercolorlight='#000000' bordercolordark='#FFFFFF' cellpadding='0' cellspacing='0'&gt;<br />  &lt;tr bgcolor='#cccccc'&gt; <br />    &lt;td colspan='2' height='20' align='center'&gt;&lt;b&gt;Debug Textarea&lt;/b&gt;&lt;/td&gt;<br />  &lt;/tr&gt;<br />  &lt;tr&gt; <br />    &lt;td colspan='2'&gt;<br />        &lt;table width='95%' border='0' align='center' &gt;<br />      &lt;tr&gt; <br />        &lt;td align='center'&gt;&lt;br /&gt;<br />          &lt;textarea id='txt_ln' name='content' rows='10' style='width:40px;overflow:hidden;height:200px;border-right:0px;text-align:right;line-height:14px' onselectstart='this.nextSibling.focus();return false' readonly&gt;&lt;/textarea&gt;&lt;textarea id='txt_main' name='content' rows='10' cols='80' onkeydown='editTab()' onkeyup='show_ln()' onscroll='show_ln()' wrap='off' style='overflow:auto;height:200px;padding-left:5px;border-left:0px;line-height:14px'&gt;&lt;/textarea&gt;<br />          &lt;script&gt;for(var i=1; i&lt;=20; i++) document.getElementById('txt_ln').value += i + '\n';&lt;/script&gt;<br />        &lt;/td&gt;<br />      &lt;/tr&gt;<br />          &lt;tr&gt; <br />            &lt;td align='center'&gt;&lt;br /&gt;<br />              &lt;input type='button' value=' 运 行 ' onclick='runcode()' accesskey='r'&gt;&amp;nbsp;&amp;nbsp;<br />              &lt;input type='button' value=' 保 存 ' onclick='savecode()' accesskey='s'&gt;&amp;nbsp;&amp;nbsp;<br />              &lt;input type='button' value=' 跳 转 ' onclick="goto(prompt('Please input the line number', '1'))"  accesskey='g'&gt;&amp;nbsp;&amp;nbsp;<br />            &lt;/td&gt;<br />          &lt;/tr&gt;<br />        &lt;/table&gt;<br />    &lt;/td&gt;<br />  &lt;/tr&gt;<br />&lt;/table&gt;<br />&lt;/BODY&gt;<br />&lt;/HTML&gt;</p>
		<p>
				<br /> </p>
<img src ="http://www.blogjava.net/myblogs/aggbug/55530.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/myblogs/" target="_blank">程序-人生</a> 2006-06-28 13:55 <a href="http://www.blogjava.net/myblogs/archive/2006/06/28/55530.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用的正则表达式</title><link>http://www.blogjava.net/myblogs/archive/2006/06/28/55529.html</link><dc:creator>程序-人生</dc:creator><author>程序-人生</author><pubDate>Wed, 28 Jun 2006 05:54:00 GMT</pubDate><guid>http://www.blogjava.net/myblogs/archive/2006/06/28/55529.html</guid><wfw:comment>http://www.blogjava.net/myblogs/comments/55529.html</wfw:comment><comments>http://www.blogjava.net/myblogs/archive/2006/06/28/55529.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/myblogs/comments/commentRss/55529.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/myblogs/services/trackbacks/55529.html</trackback:ping><description><![CDATA[
		<p>正则表达式用于字符串处理，表单验证等场合，实用高效，但用到时总是不太把握，以致往往要上网查一番。我将一些常用的表达式收藏在这里，作备忘之用。本贴随时会更新。</p>
		<p>匹配中文字符的正则表达式： [\u4e00-\u9fa5]</p>
		<p>匹配双字节字符(包括汉字在内)：[^\x00-\xff]</p>
		<p>应用：计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）</p>
		<p>String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}</p>
		<p>匹配空行的正则表达式：\n[\s| ]*\r</p>
		<p>匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*) \/&gt;/ </p>
		<p>匹配首尾空格的正则表达式：(^\s*)|(\s*$)</p>
		<p>应用：javascript中没有像vbscript那样的trim函数，我们就可以利用这个表达式来实现，如下：</p>
		<p>String.prototype.trim = function()<br />{<br />return this.replace(/(^\s*)|(\s*$)/g, "");<br />}</p>
		<p>利用正则表达式分解和转换IP地址：</p>
		<p>下面是利用正则表达式匹配IP地址，并将IP地址转换成对应数值的Javascript程序：</p>
		<p>function IP2V(ip)<br />{<br />re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式<br />if(re.test(ip))<br />{<br />return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1<br />}<br />else<br />{<br />throw new Error("Not a valid IP address!")<br />}<br />}</p>
		<p>不过上面的程序如果不用正则表达式，而直接用split函数来分解可能更简单，程序如下：</p>
		<p>var ip="10.100.20.168"<br />ip=ip.split(".")<br />alert("IP值是："+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))</p>
		<p>匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*</p>
		<p>匹配网址URL的正则表达式：<a href="http://([\w-]+\.)+[\w-]+(/[\w">http://([\w-]+\.)+[\w-]+(/[\w</a>- ./?%&amp;=]*)?</p>
		<p>利用正则表达式去除字串中重复的字符的算法程序：</p>
		<p>var s="abacabefgeeii"<br />var s1=s.replace(/(.).*\1/g,"$1")<br />var re=new RegExp("["+s1+"]","g")<br />var s2=s.replace(re,"") <br />alert(s1+s2) //结果为：abcefgi</p>
		<p>我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法，最终没有找到，这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符，再以重复的字符建立第二个表达式，取到不重复的字符，两者串连。这个方法对于字符顺序有要求的字符串可能不适用。</p>
		<p>得用正则表达式从URL地址中提取文件名的javascript程序，如下结果为page1</p>
		<p>s="<a href="http://www.9499.net/page1.htm">http://www.9499.net/page1.htm</a>"<br />s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")<br />alert(s)</p>
		<p>利用正则表达式限制网页表单里的文本框输入内容：</p>
		<p>用正则表达式限制只能输入中文：onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"</p>
		<p>用正则表达式限制只能输入全角字符： onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"</p>
		<p>用正则表达式限制只能输入数字：onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"</p>
		<p>用正则表达式限制只能输入数字和英文：onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" </p>
		<p>一个正则表达式就是由普通字符（例如字符 a 到 z）以及特殊字符（称为元字符）组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板，将某个字符模式与所搜索的字符串进行匹配。 <br />这里有一些可能会遇到的正则表达式示例： <br />Visual Basic Scripting Edition  <br />VBScript  <br />匹配  </p>
		<p>/^\[ \t]*$/  <br />"^\[ \t]*$"  <br />匹配一个空白行。  </p>
		<p>/\d{2}-\d{5}/  <br />"\d{2}-\d{5}"  <br />验证一个ID 号码是否由一个2位数字，一个连字符以及一个5位数字组成。  </p>
		<p>/&lt;(.*)&gt;.*&lt;\/\1&gt;/  <br />"&lt;(.*)&gt;.*&lt;\/\1&gt;"  <br />匹配一个 HTML 标记。  </p>
		<p>下表是元字符及其在正则表达式上下文中的行为的一个完整列表： <br />字符  <br />描述  </p>
		<p>\  <br />将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后向引用、或一个八进制转义符。例如，'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。  </p>
		<p>^  <br />匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性，^ 也匹配 '\n' 或 '\r' 之后的位置。  </p>
		<p>$  <br />匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性，$ 也匹配 '\n' 或 '\r' 之前的位置。  </p>
		<p>*  <br />匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。 * 等价于{0,}。  </p>
		<p>+  <br />匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。  </p>
		<p>?  <br />匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。  </p>
		<p>{n}  <br />n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。  </p>
		<p>{n,}  <br />n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 "Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。  </p>
		<p>{n,m}  <br />m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。 "o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。  </p>
		<p>?  <br />当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如，对于字符串 "oooo"，'o+?' 将匹配单个 "o"，而 'o+' 将匹配所有 'o'。  </p>
		<p>.  <br />匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符，请使用象 '[.\n]' 的模式。  </p>
		<p>(pattern)  <br />匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到，在VBScript 中使用 SubMatches 集合，在Visual Basic Scripting Edition 中则使用 $0…$9 属性。要匹配圆括号字符，请使用 '\(' 或 '\)'。  </p>
		<p>(?:pattern)  <br />匹配 pattern 但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如， 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。  </p>
		<p>(?=pattern)  <br />正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如， 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ，但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始。  </p>
		<p>(?!pattern)  <br />负向预查，在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows"，但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始  </p>
		<p>x|y  <br />匹配 x 或 y。例如，'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。  </p>
		<p>[[I]xyz[/I]]  <br />字符集合。匹配所包含的任意一个字符。例如， '[abc]' 可以匹配 "plain" 中的 'a'。  </p>
		<p>[^[I]xyz[/I]]  <br />负值字符集合。匹配未包含的任意字符。例如， '[^abc]' 可以匹配 "plain" 中的'p'。  </p>
		<p>[[I]a-z[/I]]  <br />字符范围。匹配指定范围内的任意字符。例如，'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。  </p>
		<p>[^[I]a-z[/I]]  <br />负值字符范围。匹配任何不在指定范围内的任意字符。例如，'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。  </p>
		<p>\b  <br />匹配一个单词边界，也就是指单词和空格间的位置。例如， 'er\b' 可以匹配"never" 中的 'er'，但不能匹配 "verb" 中的 'er'。  </p>
		<p>\B  <br />匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er'，但不能匹配 "never" 中的 'er'。  </p>
		<p>\cx  <br />匹配由x指明的控制字符。例如， \cM 匹配一个 Control-M 或回车符。 x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字符。  </p>
		<p>\d  <br />匹配一个数字字符。等价于 [0-9]。  </p>
		<p>\D  <br />匹配一个非数字字符。等价于 [^0-9]。  </p>
		<p>\f  <br />匹配一个换页符。等价于 \x0c 和 \cL。  </p>
		<p>\n  <br />匹配一个换行符。等价于 \x0a 和 \cJ。  </p>
		<p>\r  <br />匹配一个回车符。等价于 \x0d 和 \cM。  </p>
		<p>\s  <br />匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。  </p>
		<p>\S  <br />匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。  </p>
		<p>\t  <br />匹配一个制表符。等价于 \x09 和 \cI。  </p>
		<p>\v  <br />匹配一个垂直制表符。等价于 \x0b 和 \cK。  </p>
		<p>\w  <br />匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。  </p>
		<p>\W  <br />匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。  </p>
		<p>\xn  <br />匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如， '\x41' 匹配 "A"。'\x041' 则等价于 '\x04' &amp; "1"。正则表达式中可以使用 ASCII 编码。.  </p>
		<p>\num  <br />匹配 num，其中 num 是一个正整数。对所获取的匹配的引用。例如，'(.)\1' 匹配两个连续的相同字符。  </p>
		<p>\n  <br />标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式，则 n 为后向引用。否则，如果 n 为八进制数字 (0-7)，则 n 为一个八进制转义值。  </p>
		<p>\nm  <br />标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式，则 nm 为后向引用。如果 \nm 之前至少有 n 个获取，则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足，若  n 和 m 均为八进制数字 (0-7)，则 \nm 将匹配八进制转义值 nm。  </p>
		<p>\nml  <br />如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-7)，则匹配八进制转义值 nml。  </p>
		<p>\un  <br />匹配 n，其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如， \u00A9 匹配版权符号 (?)。 </p>
		<p>用正则表达式判断输入的数字是否合法 <br />作者：unknown 更新时间： 2005-03-17     <br />  </p>
		<p>&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;Untitled&lt;/title&gt;<br />&lt;/head&gt;</p>
		<p>&lt;body&gt;<br />&lt;?php<br />$in="2344";<br />if(ereg("^(-{0,1}|\+{0,1})[0-9]+(\.{0,1}[0-9]+)$",$in))<br />echo "Ok!";<br />else<br />echo "Sorry,Please input again!";<br />?&gt;<br />&lt;br&gt;很简单的嘛！</p>
		<p>&lt;/body&gt;<br />&lt;/html&gt;</p>
		<p> <br /> <br />则表达式判断email和URL <br />作者：unknown 更新时间： 2005-03-17     <br />  </p>
		<p>&lt;body  onload="f.a.select();"&gt;<br />&lt;?php <br />echo 'a:'.htmlspecialchars($a);<br />echo '&lt;br&gt;a1:';<br />$a1 = eregi_replace('(^[_.][:alnum:]-]+@([[:alnum:]][[:alnum:]-]*.)+[[:alpha:]]{2,3}$)',' &lt;a href="<a href="mailto:\1&quot;&gt;\1&lt;/a">mailto:\1"&gt;\1&lt;/a</a>&gt; ', $a) ;<br />echo htmlspecialchars($a1);<br />echo "&lt;br&gt;a1:$a1";</p>
		<p>echo '&lt;br&gt;a2:';<br />$a2 = eregi_replace('([[:alnum:]]+://([[:alnum:]][[:alnum:]-]*\.)+[[:alpha:]]{2,3}([#\?/\\][^#\?/\\][:space:]][^[:space:]]*)?)', <br />      '&lt;a href="\1" target="_blank"&gt;\1&lt;/a&gt;', $a); <br />echo htmlspecialchars($a2);<br />echo "&lt;br&gt;a2:$a2";<br />// eregi('^[_.][:alnum:]-]+@([[:alnum:]][[:alnum:]-]*\.)+[[:alpha:]]{2,3}$',$a) or die("not a email");<br />?&gt;</p>
		<p>&lt;form name="f"&gt;<br />&lt;input  name="a" value="&lt;?php echo $a; ?&gt;"&gt;<br />&lt;input type="submit" &gt;<br />&lt;/form&gt;</p>
		<p>&lt;/body&gt;    </p>
		<p> <br /> <br />在一个字符串中查找另一个字符串 <br />作者：unknown 更新时间： 2005-03-17     <br />  </p>
		<p>&lt;html&gt;<br />&lt;head&gt;&lt;title&gt;正则表达式&lt;/title&gt;&lt;/head&gt;<br />&lt;body&gt;<br />&lt;a href="./"&gt;返回列表&lt;/a&gt;&lt;br&gt;<br />&lt;form action="&lt;?echo $PHP_SELF;?&gt;" method="post"&gt;<br />在&lt;input type="text" name="string" value="&lt;?echo $string;?&gt;"&gt;中查找&lt;input type="text" name="query" value="&lt;?echo $query;?&gt;"&gt;&lt;br&gt;<br />&lt;input type="radio" name="where" value="" &lt;?if(!isset($where) or $where=="") echo "checked";?&gt;&gt;第二个字符串可以在第一个字符串的任何位置&lt;br&gt;<br />&lt;input type="radio" name="where" value="^" &lt;?if(isset($where) and $where=="^") echo "checked";?&gt;&gt;第一个字符串以第二个字符串开始&lt;br&gt;<br />&lt;input type="radio" name="where" value="$" &lt;?if(isset($where) and $where=="$") echo "checked";?&gt;&gt;第一个字符串以第二个字符串结束&lt;br&gt;<br />&lt;input type="checkbox" name="case" value="case" &lt;?if(isset($case)) echo "checked";?&gt;&gt;区分大小写&lt;br&gt;<br />&lt;input type="submit" value="查询"&gt;<br />&lt;/form&gt;<br />&lt;?<br />if(isset($string) and isset($query) and $string&lt;&gt;"" and $query&lt;&gt;""){<br />    if(isset($case)){<br />        $func = "ereg";<br />    }<br />    else{<br />        $func = "eregi";<br />    }<br />    switch($where){<br />        case "^":<br />            $query = "^" . $query;<br />            break;<br />        case "$":<br />            $query .= "$";<br />            break;<br />    }<br />    eval("\$found = $func(\"$query\",\"$string\");");<br />    if($found){<br />        echo "找到！";<br />    }<br />    else{<br />        echo "未找到！";<br />    }<br />}<br />?&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
		<p> <br /> <br />将MM/DD/YYYY格式的日期转换为YYYY-MM-DD格式 <br />作者：unknown 更新时间： 2005-03-17     <br />  </p>
		<p>&lt;html&gt;<br />&lt;head&gt;&lt;title&gt;正则表达式&lt;/title&gt;&lt;/head&gt;<br />&lt;body&gt;<br />&lt;a href="./"&gt;返回列表&lt;/a&gt;<br />&lt;form action="&lt;? echo $PHP_SELF; ?&gt;" method="post"&gt;<br />请输入MM/DD/YYYY格式的日期：<br />&lt;input type="text" name="date" value="&lt;? echo $date; ?&gt;"&gt;<br />&lt;input type="submit" value="转换为YYYY-MM-DD格式"&gt;<br />&lt;/form&gt;<br />&lt;?<br />if(isset($date)){<br />    if ( ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})", $date, $regs ) ) {<br />        echo $regs[0] . "的转换结果为：" . $regs[3] . "-" . $regs[1] . "-" . $regs[2];<br />    } else {<br />        echo "$date 的日期格式不对！&lt;br&gt;";<br />    }<br />}<br />?&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
		<p> <br /> <br />对象与像素的选获得某个网页上的所有超裢接 <br />作者：unknown 更新时间： 2005-03-17     <br />  </p>
		<p>&lt;html&gt;<br />&lt;head&gt;&lt;title&gt;正则表达式&lt;/title&gt;&lt;/head&gt;<br />&lt;body&gt;<br />&lt;a href="./"&gt;返回列表&lt;/a&gt;&lt;br&gt;<br />&lt;form action="&lt;?echo $PHP_SELF;?&gt;" method="post"&gt;<br />URL：&lt;input type="text" name="url" value="&lt;?echo $url?&gt;"&gt;&lt;input type="submit" value="获取所有裢接"&gt;<br />&lt;/form&gt;<br />&lt;?<br />if(isset($url)){<br />    echo "$url 有下列裢接：&lt;br&gt;";<br />    $fcontents = file($url);<br />    while(list(,$line)=each($fcontents)){<br />        while(eregi('(href[[:space:]]*=[[:space:]]*"?[[:alnum:]:@/._-]+"?)(.*)',$line,$regs)){<br />            $regs[1] = eregi_replace('(href[[:space:]]*=[[:space:]]*"?)([[:alnum:]:@/._-]+)("?)',"<a href="file://\\2&quot;,$regs[1">\\2",$regs[1</a>]);<br />            echo "    $regs[1]&lt;br&gt;";<br />            $line = $regs[2];<br />        }<br />    }<br />}<br />?&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
		<p> <br /> <br />正则表达式(regular expression) <br />作者：unknown 更新时间： 2005-03-17     <br />  <br />前言 </p>
		<p>正则表达式是烦琐的，但是强大的，学会之后的应用会让你除了提高效率外，会给你带来绝对的成就感。只要认真去阅读这些资料，加上应用的时候进行一定的参考，掌握正则表达式不是问题。</p>
		<p>索引</p>
		<p>1._引子<br />2._正则表达式的历史<br />3._正则表达式定义</p>
		<p>3.1_普通字符<br />3.2_非打印字符<br />3.3_特殊字符<br />3.4_限定符<br />3.5_定位符<br />3.6_选择<br />3.7_后向引用</p>
		<p>4._各种操作符的运算优先级<br />5._全部符号解释<br />6._部分例子<br />7._正则表达式匹配规则</p>
		<p>7.1_基本模式匹配<br />7.2_字符簇<br />7.3_确定重复出现</p>
		<p>
				<br />--------------------------------------------------------------------------------</p>
		<p>1. 引子<br />　　目前，正则表达式已经在很多软件中得到广泛的应用，包括*nix（Linux, Unix等），HP等操作系统，PHP，C#，Java等开发环境，以及很多的应用软件中，都可以看到正则表达式的影子。</p>
		<p>　　正则表达式的使用，可以通过简单的办法来实现强大的功能。为了简单有效而又不失强大，造成了正则表达式代码的难度较大，学习起来也不是很容易，所以需要付出一些努力才行，入门之后参照一定的参考，使用起来还是比较简单有效的。</p>
		<p>例子： <a href="mailto:^.+@.+\\..+$">^.+@.+\\..+$</a></p>
		<p>　　这样的代码曾经多次把我自己给吓退过。可能很多人也是被这样的代码给吓跑的吧。继续阅读本文将让你也可以自由应用这样的代码。</p>
		<p>　　注意：这里的第7部分跟前面的内容看起来似乎有些重复，目的是把前面表格里的部分重新描述了一次，目的是让这些内容更容易理解。</p>
		<p>2. 正则表达式的历史<br />　　正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。<br />　　1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上，发表了一篇标题为“神经网事件的表示法”的论文，引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式，因此采用“正则表达式”这个术语。</p>
		<p>　　随后，发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究，Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。</p>
		<p>　　如他们所说，剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。</p>
		<p>　</p>
		<p>3. 正则表达式定义<br />　　正则表达式(regular expression)描述了一种字符串匹配的模式，可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。</p>
		<p>列目录时，　dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。 <br />　　正则表达式是由普通字符（例如字符 a 到 z）以及特殊字符（称为元字符）组成的文字模式。正则表达式作为一个模板，将某个字符模式与所搜索的字符串进行匹配。</p>
		<p>3.1 普通字符<br />　　由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符，所有数字，所有标点符号以及一些符号。 </p>
		<p>3.2 非打印字符<br />字符  含义 <br />\cx  匹配由x指明的控制字符。例如， \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字符。 <br />\f  匹配一个换页符。等价于 \x0c 和 \cL。 <br />\n  匹配一个换行符。等价于 \x0a 和 \cJ。 <br />\r  匹配一个回车符。等价于 \x0d 和 \cM。 <br />\s  匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 <br />\S  匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 <br />\t  匹配一个制表符。等价于 \x09 和 \cI。 <br />\v  匹配一个垂直制表符。等价于 \x0b 和 \cK。 </p>
		<p>　<br />3.3 特殊字符<br />　　所谓特殊字符，就是一些有特殊含义的字符，如上面说的"*.txt"中的*，简单的说就是表示任何字符串的意思。如果要查找文件名中有＊的文件，则需要对＊进行转义，即在其前加一个\。ls \*.txt。正则表达式有以下特殊字符。<br />　</p>
		<p>特别字符 说明 <br />$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性，则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身，请使用 \$。 <br />( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符，请使用 \( 和 \)。 <br />* 匹配前面的子表达式零次或多次。要匹配 * 字符，请使用 \*。 <br />+ 匹配前面的子表达式一次或多次。要匹配 + 字符，请使用 \+。 <br />. 匹配除换行符 \n之外的任何单字符。要匹配 .，请使用 \。 <br />[  标记一个中括号表达式的开始。要匹配 [，请使用 \[。 <br />? 匹配前面的子表达式零次或一次，或指明一个非贪婪限定符。要匹配 ? 字符，请使用 \?。 <br />\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如， 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\"，而 '\(' 则匹配 "("。 <br />^ 匹配输入字符串的开始位置，除非在方括号表达式中使用，此时它表示不接受该字符集合。要匹配 ^ 字符本身，请使用 \^。 <br />{ 标记限定符表达式的开始。要匹配 {，请使用 \{。 <br />| 指明两项之间的一个选择。要匹配 |，请使用 \|。 </p>
		<p>　　构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与操作符将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。 <br />　</p>
		<p>3.4 限定符<br />　　限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*或+或?或{n}或{n,}或{n,m}共6种。<br />*、+和?限定符都是贪婪的，因为它们会尽可能多的匹配文字，只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。<br />　　正则表达式的限定符有：<br />　字符  描述 <br />*  匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。 <br />+  匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。 <br />?  匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。 <br />{n}  n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。 <br />{n,}  n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 "Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。 <br />{n,m}  m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。例如，"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。 </p>
		<p>3.5 定位符<br />　　用来描述字符串或单词的边界，^和$分别指字符串的开始与结束，\b描述单词的前或后边界，\B表示非单词边界。不能对定位符使用限定符。 <br />3.6 选择<br />　　用圆括号将所有选择项括起来，相邻的选择项之间用|分隔。但用圆括号会有一个副作用，是相关的匹配会被缓存，此时可用?:放在第一个选项前来消除这种副作用。<br />　　其中?:是非捕获元之一，还有两个非捕获元是?=和?!，这两个还有更多的含义，前者为正向预查，在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串，后者为负向预查，在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。 <br />3.7 后向引用<br />　　对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中，所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容存储。存储子匹配的缓冲区编号从 1 开始，连续编号直至最大 99 个子表达式。每个缓冲区都可以使用 '\n' 访问，其中 n 为一个标识特定缓冲区的一位或两位十进制数。<br />　　可以使用非捕获元字符 '?:', '?=', or '?!' 来忽略对相关匹配的保存。 <br />4. 各种操作符的运算优先级<br />　　相同优先级的从左到右进行运算，不同优先级的运算先高后低。各种操作符的优先级从高到低如下：<br />　操作符  描述 <br />\  转义符 <br />(), (?:), (?=), []  圆括号和方括号 <br />*, +, ?, {n}, {n,}, {n,m}  限定符 <br />^, $, \anymetacharacter  位置和顺序 <br />|  “或”操作 </p>
		<p>5. 全部符号解释<br />字符  描述 <br />\  将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如，'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。 <br />^  匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性，^ 也匹配 '\n' 或 '\r' 之后的位置。 <br />$  匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性，$ 也匹配 '\n' 或 '\r' 之前的位置。 <br />*  匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。 <br />+  匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。 <br />?  匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。 <br />{n}  n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。 <br />{n,}  n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 "Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。 <br />{n,m}  m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。例如，"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。 <br />?  当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如，对于字符串 "oooo"，'o+?' 将匹配单个 "o"，而 'o+' 将匹配所有 'o'。 <br />.  匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符，请使用象 '[.\n]' 的模式。 <br />(pattern)  匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到，在VBScript 中使用 SubMatches 集合，在JScript 中则使用 $0…$9 属性。要匹配圆括号字符，请使用 '\(' 或 '\)'。 <br />(?:pattern)  匹配 pattern 但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如， 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。 <br />(?=pattern)  正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如，'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ，但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始。 <br />(?!pattern)  负向预查，在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows"，但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始 <br />x|y  匹配 x 或 y。例如，'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。 <br />[xyz]  字符集合。匹配所包含的任意一个字符。例如， '[abc]' 可以匹配 "plain" 中的 'a'。 <br />[^xyz]  负值字符集合。匹配未包含的任意字符。例如， '[^abc]' 可以匹配 "plain" 中的'p'。 <br />[a-z]  字符范围。匹配指定范围内的任意字符。例如，'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。 <br />[^a-z]  负值字符范围。匹配任何不在指定范围内的任意字符。例如，'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。 <br />\b  匹配一个单词边界，也就是指单词和空格间的位置。例如， 'er\b' 可以匹配"never" 中的 'er'，但不能匹配 "verb" 中的 'er'。 <br />\B  匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er'，但不能匹配 "never" 中的 'er'。 <br />\cx  匹配由 x 指明的控制字符。例如， \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字符。 <br />\d  匹配一个数字字符。等价于 [0-9]。 <br />\D  匹配一个非数字字符。等价于 [^0-9]。 <br />\f  匹配一个换页符。等价于 \x0c 和 \cL。 <br />\n  匹配一个换行符。等价于 \x0a 和 \cJ。 <br />\r  匹配一个回车符。等价于 \x0d 和 \cM。 <br />\s  匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 <br />\S  匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 <br />\t  匹配一个制表符。等价于 \x09 和 \cI。 <br />\v  匹配一个垂直制表符。等价于 \x0b 和 \cK。 <br />\w  匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。 <br />\W  匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。 <br />\xn  匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如，'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' &amp; "1"。正则表达式中可以使用 ASCII 编码。. <br />\num  匹配 num，其中 num 是一个正整数。对所获取的匹配的引用。例如，'(.)\1' 匹配两个连续的相同字符。 <br />\n  标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式，则 n 为向后引用。否则，如果 n 为八进制数字 (0-7)，则 n 为一个八进制转义值。 <br />\nm  标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式，则 nm 为向后引用。如果 \nm 之前至少有 n 个获取，则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足，若 n 和 m 均为八进制数字 (0-7)，则 \nm 将匹配八进制转义值 nm。 <br />\nml  如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-7)，则匹配八进制转义值 nml。 <br />\un  匹配 n，其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如， \u00A9 匹配版权符号 (?)。 </p>
		<p>　</p>
		<p>6. 部分例子<br />正则表达式 说明 <br />/\b([a-z]+) \1\b/gi 一个单词连续出现的位置 <br />/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/  将一个URL解析为协议、域、端口及相对路径 <br />/^(?:Chapter|Section) [1-9][0-9]{0,1}$/ 定位章节的位置 <br />/[-a-z]/ A至z共26个字母再加一个-号。 <br />/ter\b/ 可匹配chapter，而不能terminal <br />/\Bapt/ 可匹配chapter，而不能aptitude <br />/Windows(?=95 |98 |NT )/ 可匹配Windows95或Windows98或WindowsNT,当找到一个匹配后，从Windows后面开始进行下一次的检索匹配。 </p>
		<p>　</p>
		<p>7. 正则表达式匹配规则<br />7.1 基本模式匹配</p>
		<p>　　一切从最基本的开始。模式，是正规表达式最基本的元素，它们是一组描述字符串特征的字符。模式可以很简单，由普通的字符串组成，也可以非常复杂，往往用特殊的字符表示一个范围内的字符、重复出现，或表示上下文。例如：</p>
		<p>^once </p>
		<p>　　这个模式包含一个特殊的字符^，表示该模式只匹配那些以once开头的字符串。例如该模式与字符串"once upon a time"匹配，与"There once was a man from NewYork"不匹配。正如如^符号表示开头一样，$符号用来匹配那些以给定模式结尾的字符串。</p>
		<p>bucket$ </p>
		<p>　　这个模式与"Who kept all of this cash in a bucket"匹配，与"buckets"不匹配。字符^和$同时使用时，表示精确匹配（字符串与模式一样）。例如：</p>
		<p>^bucket$ </p>
		<p>　　只匹配字符串"bucket"。如果一个模式不包括^和$，那么它与任何包含该模式的字符串匹配。例如：模式</p>
		<p>once </p>
		<p>与字符串</p>
		<p>There once was a man from NewYork<br />Who kept all of his cash in a bucket.</p>
		<p>是匹配的。</p>
		<p>　　在该模式中的字母(o-n-c-e)是字面的字符，也就是说，他们表示该字母本身，数字也是一样的。其他一些稍微复杂的字符，如标点符号和白字符（空格、制表符等），要用到转义序列。所有的转义序列都用反斜杠(\)打头。制表符的转义序列是：\t。所以如果我们要检测一个字符串是否以制表符开头，可以用这个模式：</p>
		<p>^\t </p>
		<p>类似的，用\n表示“新行”，\r表示回车。其他的特殊符号，可以用在前面加上反斜杠，如反斜杠本身用\\表示，句号.用\.表示，以此类推。</p>
		<p>7.2 字符簇</p>
		<p>在INTERNET的程序中，正规表达式通常用来验证用户的输入。当用户提交一个FORM以后，要判断输入的电话号码、地址、EMAIL地址、信用卡号码等是否有效，用普通的基于字面的字符是不够的。</p>
		<p>所以要用一种更自由的描述我们要的模式的办法，它就是字符簇。要建立一个表示所有元音字符的字符簇，就把所有的元音字符放在一个方括号里：</p>
		<p>[AaEeIiOoUu] </p>
		<p>这个模式与任何元音字符匹配，但只能表示一个字符。用连字号可以表示一个字符的范围，如：</p>
		<p>[a-z] //匹配所有的小写字母 <br />[A-Z] //匹配所有的大写字母 <br />[a-zA-Z] //匹配所有的字母 <br />[0-9] //匹配所有的数字 <br />[0-9\.\-] //匹配所有的数字，句号和减号 <br />[ \f\r\t\n] //匹配所有的白字符 </p>
		<p>同样的，这些也只表示一个字符，这是一个非常重要的。如果要匹配一个由一个小写字母和一位数字组成的字符串，比如"z2"、"t6"或"g7"，但不是"ab2"、"r2d3" 或"b52"的话，用这个模式：</p>
		<p>^[a-z][0-9]$ </p>
		<p>尽管[a-z]代表26个字母的范围，但在这里它只能与第一个字符是小写字母的字符串匹配。</p>
		<p>前面曾经提到^表示字符串的开头，但它还有另外一个含义。当在一组方括号里使用^是，它表示“非”或“排除”的意思，常常用来剔除某个字符。还用前面的例子，我们要求第一个字符不能是数字：</p>
		<p>^[^0-9][0-9]$ </p>
		<p>这个模式与"&amp;5"、"g7"及"-2"是匹配的，但与"12"、"66"是不匹配的。下面是几个排除特定字符的例子：</p>
		<p>[^a-z] //除了小写字母以外的所有字符 <br />[^\\\/\^] //除了(\)(/)(^)之外的所有字符 <br />[^\"\'] //除了双引号(")和单引号(')之外的所有字符 </p>
		<p>特殊字符"." (点，句号)在正规表达式中用来表示除了“新行”之外的所有字符。所以模式"^.5$"与任何两个字符的、以数字5结尾和以其他非“新行”字符开头的字符串匹配。模式"."可以匹配任何字符串，除了空串和只包括一个“新行”的字符串。</p>
		<p>PHP的正规表达式有一些内置的通用字符簇，列表如下：</p>
		<p>字符簇 含义 <br />[[:alpha:]] 任何字母 <br />[[:digit:]] 任何数字 <br />[[:alnum:]] 任何字母和数字 <br />[[:space:]] 任何白字符 <br />[[:upper:]] 任何大写字母 <br />[[:lower:]] 任何小写字母 <br />[[:punct:]] 任何标点符号 <br />[[:xdigit:]] 任何16进制的数字，相当于[0-9a-fA-F] </p>
		<p>7.3 确定重复出现</p>
		<p>到现在为止，你已经知道如何去匹配一个字母或数字，但更多的情况下，可能要匹配一个单词或一组数字。一个单词有若干个字母组成，一组数字有若干个单数组成。跟在字符或字符簇后面的花括号({})用来确定前面的内容的重复出现的次数。 </p>
		<p>字符簇 含义 <br />^[a-zA-Z_]$ 所有的字母和下划线 <br />^[[:alpha:]]{3}$ 所有的3个字母的单词 <br />^a$ 字母a <br />^a{4}$ aaaa <br />^a{2,4}$ aa,aaa或aaaa <br />^a{1,3}$ a,aa或aaa <br />^a{2,}$ 包含多于两个a的字符串 <br />^a{2,} 如：aardvark和aaab，但apple不行 <br />a{2,} 如：baad和aaa，但Nantucket不行 <br />\t{2} 两个制表符 <br />.{2} 所有的两个字符 </p>
		<p>这些例子描述了花括号的三种不同的用法。一个数字，{x}的意思是“前面的字符或字符簇只出现x次”；一个数字加逗号，{x,}的意思是“前面的内容出现x或更多的次数”；两个用逗号分隔的数字，{x,y}表示“前面的内容至少出现x次，但不超过y次”。我们可以把模式扩展到更多的单词或数字：</p>
		<p>^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划线的字符串 <br />^[0-9]{1,}$ //所有的正数 <br />^\-{0,1}[0-9]{1,}$ //所有的整数 <br />^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$ //所有的小数 </p>
		<p>最后一个例子不太好理解，是吗？这么看吧：与所有以一个可选的负号(\-{0,1})开头(^)、跟着0个或更多的数字([0-9]{0,})、和一个可选的小数点(\.{0,1})再跟上0个或多个数字([0-9]{0,})，并且没有其他任何东西($)。下面你将知道能够使用的更为简单的方法。</p>
		<p>特殊字符"?"与{0,1}是相等的，它们都代表着：“0个或1个前面的内容”或“前面的内容是可选的”。所以刚才的例子可以简化为：</p>
		<p>^\-?[0-9]{0,}\.?[0-9]{0,}$ </p>
		<p>特殊字符"*"与{0,}是相等的，它们都代表着“0个或多个前面的内容”。最后，字符"+"与 {1,}是相等的，表示“1个或多个前面的内容”，所以上面的4个例子可以写成：</p>
		<p>^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划线的字符串 <br />^[0-9]+$ //所有的正数 <br />^\-?[0-9]+$ //所有的整数 <br />^\-?[0-9]*\.?[0-9]*$ //所有的小数 </p>
		<p>当然这并不能从技术上降低正规表达式的复杂性，但可以使它们更容易阅读。 <br /> <br /> <br /></p>
<img src ="http://www.blogjava.net/myblogs/aggbug/55529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/myblogs/" target="_blank">程序-人生</a> 2006-06-28 13:54 <a href="http://www.blogjava.net/myblogs/archive/2006/06/28/55529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>