正则匹配换行
正则要匹配如果有的有换行,有的没有换行的处理 比如
<pre lang=’php’>
<p>
<a href=”(?<linkurl2>.*?)”>
(?<title>.*?)</a></p>
**这里有些有换行有些没有**
<p>
</pre>
用如下就可以了
<pre lang=’php’>
<p>
<a href=”(?<linkurl2>.*?)”>
(?<title>.*?)</a></p>[.|\n\r]*
<p>
</pre>
正则要匹配如果有的有换行,有的没有换行的处理 比如
<pre lang=’php’>
<p>
<a href=”(?<linkurl2>.*?)”>
(?<title>.*?)</a></p>
**这里有些有换行有些没有**
<p>
</pre>
用如下就可以了
<pre lang=’php’>
<p>
<a href=”(?<linkurl2>.*?)”>
(?<title>.*?)</a></p>[.|\n\r]*
<p>
</pre>
Dnspod免费dns确实难记啊
f1g1ns1.dnspod.net f1g1ns2.dnspod.net
收费的就有好几组了
NS1.DNSV2.COM,NS2.DNSV2.COM
NS1.DNSV3.COM,NS2.DNSV3.COM等等
习惯了写日志来记录调试信息 也弄个php的写写
<?php /** * 写文件 * @param string $file 文件路径 * @param string $str 写入内容 * @param char $mode 写入模式 */ function logwrite($filename,$str,$mode='a') { $file=DT_ROOT.'\\log\\'.$filename.'.txt'; $oldmask = @umask(0); $fp = @fopen($file,$mode); @flock($fp, 3); if(!$fp) { Return false; } else { @fwrite($fp,$str."\r\n"); @fclose($fp); @umask($oldmask); Return true; } } ?>
一、添加单个IP的方法:
# cd /etc/sysconfig/network-scripts
# cp ifcfg-eth0 ifcfg-eth0:0
# nano ifcfg-eth0:0
使用cp命令复制一个eth0的文件,新的文件名为eth0:0 ,然后用nano编辑此文件。不习惯用nano的可以用vi等命令。打开文件后编辑:
DEVICE=eth0:0 #此处添加:0,保持和文件名一致,添加多个IP依次递增
ONBOOT=yes #是否开机激活
BOOTPROTO=static #静态IP,如果需要DHCP获取请输入dhcp
IPADDR=192.168.1.2 #此处修改为要添加的IP
NETMASK=255.255.255.0 #子网掩码根据你的实际情况作修改
文件编辑完之后,运行:
/etc/init.d/network reload
用ifconfig看新的IP是否已经加上。
删除IP用如下
如删除eth0:1这样的虚拟网卡
建议删除后重启网络服务或重启系统
二、批量添加IP:
在/etc/sysconfig/network-scripts下创建一个range文件,也可以用vi等编辑
nano /etc/sysconfig/network-scripts/ifcfg-eth0-range0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR_START=192.168.2.2 #起始IP
IPADDR_END=192.168.2.254 #结束IP
CLONENUM_START=1 #表示这段IP网卡号从eth0:1开始
NETMASK=255.255.255.0
无类域间路由(CIDR)的子网掩码设置参考:http://www.taohost.net/tools/subnet.htm
/29 (5 usable) NETMASK = 255.255.255.248
/28 (13 usable) NETMASK = 255.255.255.240
/27 (29 usable) NETMASK = 255.255.255.224
/26 (61 usable) NETMASK = 255.255.255.192
/25 (125 usable) NETMASK = 255.255.255.128
/24 (253 usable) NETMASK = 255.255.255.0
三、为一块新网卡配置IP地址的方法:
如果是为第二块网卡配IP,在/etc/sysconfig/network-scripts目录下编辑一个ifcfg-eth1的文件:
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.18
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
修改一下IPADDR,NETMASK和GATEWAY的参数。
运行:
/etc/init.d/network reload
用ifconfig看新的IP是否已经加上。
今天去机房加内存,加了内存之后 电脑重启,windows加载条一直摇晃,
然后 要进入输密码这步骤时候,突然显示器 黑屏,显示器信号登快闪了
七八下。初步排查可能是内存不兼容或是没插好。只能一条条换着插试试
到最好还是不行,只能把新加的拔了 用原先的内存 结果还是这样。
这下纠结了。进步了系统了。这时,小余说他曾经碰到过类似情况。原因是
客户的机子装了金山卫士什么的。庆幸的是安全模式能进,然后进安全模式,
卸载金山和360等。重启还是不行。还有个就是金山贝壳很难卸,弄不好就是
会影响网卡驱动。然后只能把贝壳重新装上。顺着小余的思路,初步怀疑是由于软件
的问题引起的。现在就看看日志里有些什么提示
偶然看到mssql有警告。仔细回想下 好像是曾经升级sql2005后就没重启过。
在安全模式下启动sql,但是提示什么无法启动。看了网上都是说sql配置管理
的VIA禁用掉。可是我本来就禁用的。逼不得已就卸载2005再装。
杯具的是安全模式不能用windows installer.没办法,最后只能启用备用服务器,
把数据库导过去,然后安装。最后心灰意冷。乱试一通,通过备用服务器居然能
远程登录。说明系统已经起来了。然后从远程查看了分辨率。比较了下。
我X,机房什么破显示器啊。超频也不提示下。蛋疼。不过最终找到问题还是值得
有空玩了下android,配置环境比较啰嗦。google下
贴效果图;

效果简单 之前是模仿了cnblog的一篇文章。不过他是抓url。我是用socket。
后缀还没细分,喜欢的人自己研究去,贴代码
public class MyWhois extends Activity { private TextView vResult; private EditText eKeyWord; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button sButton1 = (Button)findViewById(R.id.Submit); vResult = (TextView)findViewById(R.id.ResultView); eKeyWord = (EditText)findViewById(R.id.KeyWord); //注册点击事件监听者 sButton1.setOnClickListener(new OnClickListener() { public void onClick(View aView) { TextView vResult = (TextView)findViewById(R.id.ResultView); vResult.setText("正在查询中,请稍等!"); //新建查询线程,否则UI界面会假死 Thread mThread = new Thread(new Runnable() { public void run() { String whoisMes=""; try { try { String domain=eKeyWord.getText().toString(); String IP="whois.cnnic.cn"; if(domain.contains(".com")||domain.contains(".com")){ IP="whois.internic.net"; } Socket socket = new Socket(IP, 43); InputStream Is = socket.getInputStream(); OutputStream Os = socket.getOutputStream(); DataInputStream DIS = new DataInputStream(Is); PrintStream PS = new PrintStream(Os); DataInputStream in = new DataInputStream(System.in); PS.println(domain); System.out.println("please wait whois's message..."); boolean TF = false; while (DIS.read() > 0) { String tempStr = DIS.readLine(); whoisMes = whoisMes + tempStr + "\r\n"; } whoisMes=new String(whoisMes.getBytes("ISO-8859-1"),"utf-8"); System.out.println(whoisMes); DIS.close(); PS.close(); Is.close(); Os.close(); socket.close(); } catch (Exception e) { System.out.println("Error:" + e); } //返回的数据需要使用'\n'来换行! Message mg = Message.obtain(); mg.obj = whoisMes; mHandler.sendMessage(mg); } catch (Exception e) { e.printStackTrace(); } } }); mThread.start(); } } ); } //定义一个Handler private Handler mHandler = new Handler(){ public void handleMessage(Message msg){ String m = (String) msg.obj; if(m.length()<=0) { vResult.setText("查询结果为空."); } else { vResult.setText(m); } } }; }
这次升级真是太折腾了。大大影响了平台的正常使用,把自己也搞的疲惫不堪。
sql2000升级2005有几种服务。
一种是在2000的基础上默认升级实例。另一种 是通过备份还原的形式。
我用的是备份还原。刚开始升级后,运行速度非常快,网站访问也很 顺畅。
但是过会之后,就会越来越卡,越来越慢,严重的超时现象。也不占cpu,就是
很卡,到最后不得已重启服务器。重启后又恢复正常。但是之后有开始了。
查阅了很多资料,最后 还是很可能在一个问题上 索引的重聚和索引碎片的整理。
我用了DBCC INDEXDEFRAG(‘dbname’,'tablename’),这样一个个执行表,很费力,
最后看了文章有用sp_updatestats 更新所有的。更新之后 至今还没有发现之前的
那种卡。说明数据库升级总算成功了。总算是平台正常了。
2005性能 还是有很大的提升的。其实主要还是用他的rownumber来提高分页查询的速度
下面用个自己的分页存储过程:
ALTER PROCEDURE [dbo].[P_PAGE] ( @CurrentPage int, @PageSize int, @TableName varchar(1000), @KeyField varchar(1000), @Fields varchar(1000), @Condition1 varchar(2000), @Condition2 varchar(1000), @PageCount int output, @RecordCount int output, @sql nvarchar(4000) output )AS declare @num numeric(8,2),@pz numeric(8,2),@rpz int set @sql = 'select @RecordCount=count(id) from '+@TableName+' '+@Condition1 exec sp_executesql @sql,N'@RecordCount int output',@RecordCount output set @pz = @PageSize set @num = @RecordCount / @pz set @rpz = @num if @num > @rpz set @rpz = @rpz + 1 select @PageCount = @rpz if @CurrentPage < 1 begin set @CurrentPage = 1 end if @CurrentPage > @PageCount and @PageCount >0 begin set @CurrentPage = @PageCount end print @CurrentPage if(@CurrentPage=1) begin set @sql = 'select top '+convert(varchar,@PageSize)+' '+@Fields+' from '+@TableName+' '+@Condition1+' '+@Condition2 end else begin set @sql='SELECT '+@Fields+' FROM (SELECT '+@Fields+', ROW_NUMBER() OVER(ORDER BY id asc) AS rownum FROM '+@TableName+' ) as Tbl WHERE rownum BETWEEN '+convert(varchar,(@CurrentPage-1)*@PageSize+1)+' AND '+convert(varchar,@CurrentPage*@PageSize) end exec sp_executesql @sql
另附2005 索引重聚proc GO /****** 对象: StoredProcedure [dbo].[db2005_indexes] 脚本日期: 01/05/2012 09:32:58 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[db2005_indexes] AS SET NOCOUNT ON DECLARE @tablename VARCHAR (128) DECLARE @execstr VARCHAR (255) DECLARE @objectid INT DECLARE @objectowner VARCHAR(255) DECLARE @indexid INT DECLARE @frag DECIMAL DECLARE @indexname CHAR(255) DECLARE @dbname sysname DECLARE @tableid INT DECLARE @tableidchar VARCHAR(255) SELECT @dbname = db_name() IF @dbname IN ('master', 'msdb', 'model', 'tempdb') BEGIN PRINT '不能运行系统数据库' RETURN END DECLARE tables CURSOR FOR SELECT convert(varchar,so.id) FROM sysobjects so JOIN sysindexes si ON so.id = si.id WHERE so.type ='U' AND si.indid < 10 AND si.rows > 0 CREATE TABLE #templist ( ObjectName CHAR (255), ObjectId INT, IndexName CHAR (255), IndexId INT, Lvl INT, CountPages INT, CountRows INT, MinRecSize INT, MaxRecSize INT, AvgRecSize INT, ForRecCount INT, Extents INT, ExtentSwitches INT, AvgFreeBytes INT, AvgPageDensity INT, ScanDensity DECIMAL, BestCount INT, ActualCount INT, LogicalFrag DECIMAL, ExtentFrag DECIMAL) OPEN tables FETCH NEXT FROM tables INTO @tableidchar WHILE @@FETCH_STATUS = 0 BEGIN INSERT INTO #templist EXEC ('DBCC SHOWCONTIG (' + @tableidchar + ') WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS') FETCH NEXT FROM tables INTO @tableidchar END CLOSE tables DEALLOCATE tables SELECT * FROM #templist w--here indexname like '%destine%' DECLARE indexes CURSOR FOR SELECT ObjectName, ObjectOwner = user_name(so.uid), ObjectId, IndexName, ScanDensity FROM #templist f JOIN sysobjects so ON f.ObjectId=so.id WHERE INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0 SELECT '开始重新生成或者重组索引 ' + CONVERT(VARCHAR,GETDATE()) OPEN indexes FETCH NEXT FROM indexes INTO @tablename, @objectowner, @objectid, @indexname, @frag WHILE @@FETCH_STATUS = 0 BEGIN SET QUOTED_IDENTIFIER ON if(@frag>30) begin SELECT @execstr = 'DBCC DBREINDEX (' + '''' +RTRIM(@objectowner) + '.' + RTRIM(@tablename) + '''' + ', ' + RTRIM(@indexname) + ') WITH NO_INFOMSGS' SELECT '正在执行: ' --SELECT(@execstr) print @execstr EXEC (@execstr) end else if (@frag<30) begin SELECT @execstr = 'DBCC INDEXDEFRAG ('+db_name()+','+ '''' +RTRIM(@objectowner) + '.' + RTRIM(@tablename) + '''' + ', ' + RTRIM(@indexname) + ') WITH NO_INFOMSGS' SELECT '正在执行: ' --SELECT(@execstr) print @execstr EXEC (@execstr) end SET QUOTED_IDENTIFIER OFF FETCH NEXT FROM indexes INTO @tablename, @objectowner, @objectid, @indexname, @frag END CLOSE indexes DEALLOCATE indexes SELECT '完成结束索引' + CONVERT(VARCHAR,GETDATE()) DROP TABLE #templist
svn relocate 提示uuid ****但是工作副本是******
重新定位SVN的时候,遇到uuid不一致的问题.
Google得知可以使用以下命令
有到svnadmin命令:(位于 D:\Program Files\VisualSVN Server\bin)
svnadmin setuuid
你可以使用它来设置UUID。这样,你的工作副本不会抱怨的UUID不匹配。
乃妹的,折腾了2天的linux底下service的创建终于搞定了。
用tomcat的jsvc始终没搞定,说是找不到class,但是单独运行jar是可以的,
这不是坑爹吗。不管了 反正wrapper可以用就行了。
需要注意的地方:一个是jdk的路径,一个是要对wrapper 加权限,另一个是mainclass。
步骤如下:
1、下载Java Service Wrapper(目前版本wrapper-linux-x86-32-3.2.3), 解压。
http://wrapper.tanukisoftware.org/
复制src\bin\sh.script.in到/opt/testapp/bin目录,重命名为symydns
复制wrapper\bin目录下的wrapper文件到/opt/testapp/bin目录
复制src\conf\wrapper.conf.in到/opt/testapp/conf目录,重命名为wrapper.conf
复制src\lib\lib目录下3个文件到/opt/testapp/lib目录
wrapper.so
wrapper.jar
我把我的配置文件贴出来
APP_NAME="SocketServer" APP_LONG_NAME="SocketServer Application Server" WRAPPER_CMD="./wrapper" WRAPPER_CONF="../conf/wrapper.conf" 赋予执行权限 chmod 775 /opt/testapp/bin/symydns chmod 775 /opt/testapp/bin/wrapper 3、修改/opt/testapp/conf/wrapper.conf文件 wrapper.java.command=/opt/jdk1.6.0_02/bin/java 使用WrapperStartStopApp,这样可以通过命令带start/stop来启动/停止程序,这个千万不要改,改了后会启动多个JVM。 wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperStartStopApp #这里添加你用到的jar包文件,从1..n你自己全写上吧,不过wrapper是必须的 wrapper.java.classpath.1=../lib/wrapper.jar wrapper.java.classpath.2=../lib/test.jar wrapper.java.classpath.3=/opt/jdk1.6.0_02/lib/dt.jar wrapper.java.classpath.4=/opt/jdk1.6.0_02/lib/tools.jar wrapper.java.library.path.1=../lib #这个就是你自己可执行程序的主类(MainClass),一般来说,就是包含public static void main的那个类 wrapper.app.parameter.1=mydns.testjsvc wrapper.app.parameter.2=1 wrapper.app.parameter.3=true wrapper.app.parameter.4=cn.com.ppnote.SocketServer wrapper.app.parameter.5=true wrapper.app.parameter.6=1 wrapper.app.parameter.7=stop 上面的配置里使用了WrapperStartStopApp,这样可以通过命令带start/stop来启动/停止程序。 4、让SocketServer开机自动运行 ln -s /opt/testapp/bin/SocketServer /etc/init.d/SocketServer ln -s /opt/testapp/bin/SocketServer /etc/rc0.d/SocketServer ln -s /opt/testapp/bin/SocketServer /etc/rc1.d/SocketServer ln -s /opt/testapp/bin/SocketServer /etc/rc2.d/SocketServer ln -s /opt/testapp/bin/SocketServer /etc/rc3.d/SocketServer ln -s /opt/testapp/bin/SocketServer /etc/rc4.d/SocketServer ln -s /opt/testapp/bin/SocketServer /etc/rc5.d/SocketServer ln -s /opt/testapp/bin/SocketServer /etc/rc6.d/SocketServer 5、测试 执行命令:service symydns start|stop|restart|status
程序运行时,Java Service Wrapper在/opt/testapp/bin/目录下产生wrapper.log日志,
STATUS | wrapper | 2007/08/01 17:17:01 | –> Wrapper Started as Daemon
STATUS | wrapper | 2007/08/01 17:17:01 | Launching a JVM…
INFO | jvm 1 | 2007/08/01 17:17:09 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
INFO | jvm 1 | 2007/08/01 17:17:09 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
INFO | jvm 1 | 2007/08/01 17:17:09 |
INFO | jvm 1 | 2007/08/01 17:17:10 | 程序开始运行…
INFO | jvm 1 | 2007/08/01 17:17:26 | Connection: Open
……
附目录结构
/opt/testapp/bin
| SocketServer
| wrapper
| wrapper.log(程序运行时自动产生)
/opt/testapp/conf
| wrapper.conf
/opt/testapp/lib
| libwrapper.so
| wrapper.jar
| test.jar
网上参考教程很多:
http://hi.baidu.com/ling1026/blog/item/1a060e97bf03d96b54fb9654.html