巷尾的酒吧

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  64 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks

#

解决方法如下:     
1>、进入超级用户模式。也就是输入"su -",系统会让你输入超级用户密码,输入密码后就进入了超级用户模式。
2>、添加文件的写权限。也就是输入命令"chmod u+w /etc/sudoers"。
3>、编辑/etc/sudoers文件。也就是输入命令"vim /etc/sudoers",输入"i"进入编辑模式,找到这一行:"root ALL=(ALL) ALL"在起下面添加"xxx ALL=(ALL) ALL"
(这里的xxx是你的用户名),然后保存(就是先摁一下Esc键,然后输入":wq")退出。
4>、撤销文件的写权限。也就是输入命令"chmod u-w /etc/sudoers"。 至此,问题解决。
posted @ 2012-10-15 22:50 abing 阅读(195) | 评论 (0)编辑 收藏

Telnet服务的安装

       Red Hat Enterprise Linux安装程序默认没有安装Telnet服务,可使用下面命令检查系统是否已经安装了Telnet服务或查看已经安装了何种版本。

rpm -q telnet-server

       如果系统还没有安装Telnet服务。可将Red Hat Enterprise Linux安装盘放入光驱,加载光驱后找到Telnet服务的RPM安装包文件,然后安装Telnet服务。
yum install telnet-server

启动和停止Telnet服务

       Telnet服务并不像其他服务(如HTTP和FTP等)一样作为独立的守护进程运行,它使用xinetd程序管理,这样不但能提高安全性,而且还能使用xinetd对Telnet服务器进行配置管理。

       Telnet服务安装后默认并不会被xinetd启用,还要修改文件/etc/xinetd.d/telnet将其启用。其实/etc/xinetd.d/telnet文件是xinetd程序配置文件的一部分,可以通过它来配置Telnet服务器的运行参数。编辑文件/etc/xinetd.d/telnet,找到语句“disable = yes”,将其改为“disable = no” 。然后使用以下命令重新启动xinetd服务:#/etc/init.d/xinetd restart

    [root@RHCE~]#vi /etc/xinetd.d/telnet

posted @ 2012-10-14 23:22 abing 阅读(247) | 评论 (0)编辑 收藏

启动防火墙

1) 重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off   或者 /sbin/chkconfig --level 2345 iptables off

2) 即时生效,重启后失效

service 方式
开启: service iptables start
关闭: service iptables stop

iptables方式

查看防火墙状态:
/etc/init.d/iptables status

暂时关闭防火墙:
/etc/init.d/iptables stop

重启iptables:
/etc/init.d/iptables restart


需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。

在开启了防火墙时,做如下设置,开启相关端口。

修改/etc/sysconfig/iptables 文件,添加以下内容:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

查看所有进程,包括服务,命令里ps -aux是netconfig在redhat里面是字符界面下的网卡配置工具。

chkconfig --list

可以列出sysV和xinet服务在各个runlevel的默认启动状态。

service 服务名 参数

查看状态的参数好像是stat 吧。

自启动服务

ntsysv 
posted @ 2012-10-14 22:55 abing 阅读(800) | 评论 (0)编辑 收藏

一、Fedora 启动sshd服务:

1、先确认是否已安装ssh服务:

  [root@localhost ~]# rpm -qa | grep openssh-server

 openssh-server-5.3p1-19.fc12.i686 (这行表示已安装)

  若未安装ssh服务,可输入:

  #yum install openssh-server 

  进行安装


2、修改配置文件

   #vi /etc/ssh/sshd_config

   #Port 22  监听的端口号,默认是22,可以自定义。

  #Protocol 2  支持的协议,默认就好,不用修改

  #PermitRootLogin yes 是否允许root直接登录,最好设置为no

    #MMaxAuthTries 6 最大登录数,默认是6,建议设置为3,防止别人密码穷举。

   修改完配置后,重启SSH服务:

  [root@localhost ~]# /etc/rc.d/init.d/sshd restart

   Stopping sshd: [ OK ]

Starting sshd: [ OK ]:


3、查看sshd状态:

   #service sshd status


4、将端口22(或者自定义的其他端口)加到防火墙的设置中,标记为Accept

   #iptables -A INPUT -p tcp --dport 22 -j ACCEPT

(这句很重要,不然外部连接不了。)

   也可以将上述参数加入防火墙配置中:

   #vi /etc/sysconfig/iptables

  加入:-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

   保存后重启iptables即可

详情可以查阅 iptables的用法


二、Fedora15/16/17 启动sshd服务:

由于Fedora 15/16使用systemd服务,

1、启动SSH服务与上面有些不同

# systemctl start sshd.service

或者 #service sshd start

也可以用 restart 和 stop控制sshd服务


2、设置系统启动时开启服务

# systemctl enable sshd.service


3、同样也需开启防火墙22端口

   #iptables -A INPUT -p tcp --dport 22 -j ACCEPT

   也可以将上述参数加入防火墙配置中:

   #vi /etc/sysconfig/iptables

   加入:-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

   保存后重启iptables即可

详情可以查阅 iptables的用法



转载请注明From: http://blog.163.com/jackswu@yeah
posted @ 2012-10-14 20:06 abing 阅读(1597) | 评论 (0)编辑 收藏

在Unix下常遇到一些解包、压包的问题。一般情况下将若干文件或文件夹打成tar包,是为了便于文件的传输和管理。例如,通过FTP从Unix平台下载目录结构较多的文件夹到Windows平台或另外一Unix平台,虽然文件夹不是太大,但由于每个文件很小,且非常多,每个文件都要进行文件头、尾检查校验。下载速度会非常慢。如果打成tar包,传输就会快很多。存档的文件夹打成tar包也容易管理。
值得注意的是:tar文件只是将文件或文件夹打包,并没有进行压缩。如果文本文件较多,对其压缩会节省很大的磁盘空间,传输将更快。压缩和解压缩方法可以参考下文给出的示例。
下面我以Sun Solaris 5.8(其他unix如linux、aix大体相同)为例,就常见的一些问题向各位同仁作一下介绍,供大家在工作中参考。因水平有限,仅做抛砖引玉,欢迎大家积极补充。

1、如何解开.tgz或.tar.gz文件?
2、如何解开.z或.Z文件?
3、如何解开.tar.Z文件?
4、如何安装、卸载、列出rpm包信息?(linux常用)
5、如何使用tar命令测试、展开、生成tgz包?
6、如何解开和生成tar文件?
7、如何象在PC上的ARJ那样的分解打包软件?
8、在Unix下如何压缩文件?
9、如何解开和生成其他包如.jar文件?
10、抛砖引玉,待同仁补充

============================================================
1、如何才能解开.tgz或.tar.gz文件?
1)方法一:
gzip -d filename.tar.gz 或 gzip -d filename.tgz
tar -xvf filename.tar
2)方法二:
解压并列表:
gzip -dc filename.tgz | tar xvf -           #解.tgz文件
gzip -dc filename.tar.gz | tar xvf -        #.tar.gz 同 .tgz文件
只列表不生成文件:
gzip -dc filename.tgz | tar tvf -           #解.tgz文件
gzip -dc filename.tar.gz | tar tvf -        #.tar.gz 同 .tgz文件
gzip的其他使用方法参见gzip -h

============================================================
2、如何才能解开.z或.Z文件?
1)解.z 文件: gzcat filename.z
2)解.Z 文件:uncompress -c filename.Z

============================================================
3、如何解.tar.Z文件?
1)解压并列表:
zcat filename.tar.Z | tar xvf -            #解.tar.Z文件
uncompress -c tast.tar.Z | xvf -           #uncompress -c 同 zcat
2)只列表不生成文件:
zcat filename.tar.Z | tar tvf -             #解.tar.Z文件
uncompress -c filename.tar.Z | tvf -        #uncompress -c 同 zcat

============================================================
4、如何安装、卸载、列出rpm包信息?(linux常用)
1)安装rpm包时显示进度,例如:用-vh参数,如rpm -ivh ipchains-1.3.6-1.i386.rpm
2)直接通过ftp来安装rpm包,例如:rpm -i
3)校验所有的rpm包,查找丢失的文件,例如:rpm –Va
4)查找一个文件属于哪个rpm包,例如:rpm -qf /usr/bin/who
5)列出一个rpm包的描述信息,例如:rpm -qpi mon-0.37j-1.i386.rpm
6)列出一个rpm包的文件信息,例如:rpm -qpl mon-0.37j-1.i386.rpm
7)列出并过滤已经安装的包,例如:rpm –q |grep IBM
8)删除已安装的包,例如:rpm –e 包名
9)其他rpm操作参见 # rpm --help

============================================================
5、如何使用tar命令测试、展开、生成tgz包?
tar zvfx filename.tgz                       #在当前目录下展开这个包
tar zvft filename.tgz                       #只测试不展开
tar zvfx filename.tgz -C /new-dir           #展开后放到/new-dir目录下
tar zvfc filename.tgz /filename             #把/filename目录下所有的文件及子目录打包成filename.tgz

============================================================
6、如何解开和生成tar文件?
tar xvf filename.tar                              #当先目录解包
tar tvf filename.tar                              #只显示不生成文件
tar cvf filename.tar <file or dir list>          #生成包
tar的参数很多,要仔细学习参见#tar -h

============================================================
7、如何象在PC上的ARJ那样的分解打包软件?
# split -b 100k big.file
   将big.file分解成若干500K的小文件 (名为xa, xb, xc, ...)
# split -l 500 big.file
   将big.file分解成每个500 lines的小文件
其它使用方法参见split –h

============================================================
8、在Unix下如何压缩文件?
在unix下压缩方法有多种,可以参见gzip、gunzip、zcat、compress等工具文档,也可以参见上面所述的一些方法。下面仅以compress命令示例:
例如:需要将/filename的文件打包并压缩,需要做以下步骤:
1)打包
tar cvf filename.tar ./dir
2)压缩
compress filename.tar #生成filename.tar.Z文件
如果还原回原来的目录结构
1)解压缩
uncompress filename.tar.Z
3)解tar包
tar xvf filename.tar
如果unix命令参数不熟悉,一般也可以通过ftp将压缩或打包文件传到PC上,利用Windows下的Winzip或rar等压缩工具解开。

==========================================================
9、如何解开和生成其他包如.jar文件?
在unix上生成和解开jar包和对tar包的操作差不多。
例如:
jar cvf filename.jar /dirname    #将/dirname 打成jar包
jar xvf filename.jar             #解开jar包
jar tvf filename.jar             #只列表不解开jar包

posted @ 2012-10-14 18:23 abing 阅读(357) | 评论 (0)编辑 收藏

  在Microsoft SQL Server 2008系统中,数据库管理员(Database Administration,简称为DBA)是最重要的角色。DBA的工作目标就是确保Microsoft SQL Server 2008系统正常高效地运行。DBA的工作也是最繁忙的工作,无论是性能调整,还是灾难恢复,都离不开DBA的支持。
  一般地,作为一个DBA,至少应该做好以下12项任务:
  任务一:安装和配置;
  任务二:容量规划;
  任务三:应用架构设计;
  任务四:管理数据库对象;
  任务五:存储空间管理;
  任务六:安全管理;
  任务七:备份和恢复;
  任务八:性能监视和调优;
  任务九:调度作业;
  任务十:网络管理;
  任务十一:高可用性和高可伸缩性管理;
  任务十二:故障解决;
  下面简单描述这些DBA的任务
  任务一:安装和配置。
  DBA的第一项任务是安装和配置Microsoft SQL Server 2008软件系统,为顺利使用Microsoft SQL Server 2008软件创建良好的环境。无论是安装还是配置,都应该根据实际需要来进行,使得系统满足用户的实际需求。需要注意的是,系统配置不是一劳永逸的,应该随时根据需求的变化和环境的需要,进行监视和适当地调整。
  任务二:容量规划。
  容量规划是对整个Microsoft SQL Server 2008系统进行一个总体的规划。规划的重点应该放在解决瓶颈问题上。可以从内容和期限两个方面考虑系统的容量规划。
  从内容上来看,应该考虑的主要内容包括:硬件容量规划、软件规划、网络规划。硬件容量规划包括磁盘空间、CPU、I/O等规划。软件规划包括操作系统的安装和配置规划、数据库规划、数据库对象内容和数量规划等。网络规划包括网络硬件、网络软件和协议、网络客户数量流量和分布、网络拓扑结构等规划。
  从期限上来看,应该考虑短期、中期和长期规划。短期规划的目的是满足当前日常业务的需要。中期规划主要是满足业务发展和扩大的需要。长期规划主要是满足业务极限需要等。例如,如果预测某个系统的当前并发用户数量是1000,3年后的用户可能达到1000万,那么这时既不能按照1000用户的需求来设计,也不能一下子按照1000万用户的需求来设计,一定要采取一个折中的形式。
  任务三:应用架构设计。
  应用架构设计包括数据库设计、应用程序设计和相应的技术架构设计。
  数据库设计应该考虑数据库的逻辑需求、数据库的创建方式和数量、数据库数据文件和日志文件的物理位置等。一般情况下,可以在Microsoft SQL Server 2008系统成功安装之后,根据规划的目标,手工创建数据库。
  应用设计应该考虑开发工具的选择、API技术、内部资源和外部资源的结合、应用架构的分布等。需要强调是在应用设计时,DBA应该与开发人员共同工作,确保他们编写出优化的代码,尽可能地使用服务器的资源。
  技术架构设计主要包括表示层、逻辑层和数据层的分布。这些分布不应该考虑到硬件资源和用户需求。既不能片面地追求过高的硬件资源,也不能仅仅局限于当前的环境,一定要按照可扩展的观点来综合考虑。
  任务四:管理数据库对象。
  管理数据库对象是使用数据库的最基本、最重要的工作。这些对象包括表、索引、视图、存储过程、函数、触发器、同义词等。为了完成管理数据库对象的工作,DBA应该能够很好地回答诸如下面的这些问题。
  系统应该包括哪些数据?
  应该怎样存储这些数据?
  应该在系统中创建哪些表?
  应该在这些表中创建哪些索引,以便加速检索?
  是否应该创建视图?为什么要创建这些视图?
  应该创建哪些存储过程、函数、CLR对象?
  应该在哪些表上创建触发器?应该针对哪些操作创建触发器?
  是否应该创建同义词?
  任务五:存储空间管理。
  存储空间管理任务就是怎样为数据分配空间、怎样保持空间可以满足数据的不断增长。随着业务量的继续和扩大,数据库中的数据也会逐渐地增加,事务日志也不断地增加。存储空间管理任务主要围绕下面几个问题。
  当前的数据库由那些数据文件组成?
  事务日志的大小应该如何设置?
  数据的增长速度是多大?
  如何配置数据文件和日志文件的增长方式?
  数据库中的数据何时可以清除或转移到其他地方?
  任务六:安全管理。
  安全性是DBA重要的日常工作之一。安全管理的主要内容包括账户管理和权限管理。账户管理就是在数据库中应该增加哪些账户、这些账户应该组合成哪些角色等等。权限管理是对象权限和语句权限的管理,应该回答下面这些问题:
  这些账户或角色应该使用哪些对象?
  这些账户或角色应该对这些对象执行哪些操作?
  这些账户或角色应该在数据库中执行哪些操作?
  如何设置架构?如何建立架构和对象、架构和用户的关系?
  任务七:备份和恢复。
  无论系统运行如何,系统的灾难性管理是不可缺少的。天灾、人祸、系统缺陷都有可能造成系统的瘫痪、失败。怎样解决这些灾难性问题呢?办法就是制订和实行备份和恢复策略。备份就是制作数据的副本,恢复就是将数据的副本复原到系统中。备份和恢复工作是DBA的一项持续性的重要工作,其执行频率根据数据的重要程度和系统的稳定程度来确定。
  任务八:性能监视和调优。
  根据企业的经营效益评价企业的管理水平,根据学生的考试成绩评价学生的学习好坏。作为一个大型软件系统,Microsoft SQL Server 2008系统的运行好坏必须得到正确地监视、评价和相应的调整。这是DBA的一项高级工作。借助一些工具和运行性能指标,DBA应该能够监视系统的运行。如果某些运行指标出现了问题,DBA应该及时地采取补救措施,使得系统始终保持高效运行状态。
  任务九:调度作业。
  DBA不可能一天24小时不停地盯住系统的运行,及时地执行某些指定的操作。Microsoft SQL Server 2008系统提供了许多工具,DBA应该充分利用这些工具和机制,解决下面一些问题。
  调度哪些作业应该由系统执行?
  这些作业应该在何时执行?
  如何确保这些作业可以正确地执行?
  如果自动执行的作业执行失败时,应该如何处理?
  如何使得系统可以均衡地执行相应的操作?
  任务十:网络管理。
  作为一种分布式的网络数据库,网络管理的任务更加的重要。Microsoft SQL Server 2008系统提供了网络管理工具和服务,DBA应该借助这些工具进行服务规划和管理网络操作。
  任务十一:高可用性和高可伸缩性管理。
  作为一个DBA,必须保持系统具有高可用性和高可伸缩性。可用性是一项度量计算机系统正常运行时间的指标。可伸缩性描述应用程序可以接受的并发用户访问的数量问题。影响系统可用性的主要因素包括:网络可靠性、硬件故障、应用程序失败、操作系统崩溃、自然灾害等。无论是数据库系统管理员,还是应用程序设计人员,都应该最小化系统破坏的几率,最大化系统的可用性。在设计系统的可用性时,应该确定采取什么样的可用性策略来满足可用性的需求。
  可用性的需求可以通过3个方面描述,即运行的时间、连接性需求和数据的紧密和松散要求。在确定可用性的需求时,首先考虑系统的运行时间。一般地,数据库应用程序有两种运行时间,即在工作时间是可用的和在任何时间都是可用的。如果只是要求在工作时间是可用的,那么可以把系统的维护等工作安排在周末进行。但是,有许多应用程序要求每天运行24小时、每周运行7天,例如,在线超市等,这时必须采取措施保证系统总是运行的。不同的应用程序有不同的连接性要求。大多数的应用程序和电子商务解决方案要求采用可靠的网络连接。这时,要求永久性的在线连接,必须最小化各种异常现象的发生。有些应用程序允许用户离线使用。这时,系统的可用性要求降低了。大多数应用程序要求数据是同步使用的。用户对数据的请求,系统必须立即做出回应。这是紧密型的数据要求,这种情况必须保证系统的高可用性。有些应用程序不需要数据是同步的,对用户的请求可以延迟回应。这种要求是数据松散型的要求,这时系统的可用性需求比较低。
  任务十二:故障解决。
  虽然不希望Microsoft SQL Server 2008系统出现故障,但是故障可能是无法避免的。这些故障可能每天都会发生。有些故障是人为不小心造成的,有些故障可能是系统中的缺陷形成的,有些故障可能是莫名其妙的。作为一个DBA,在系统中的其他用户心目中是Microsoft SQL Server系统的权威。无论是大事还是小事,DBA都应该做到迅速诊断、准确判断、快速修复。从这个意义上来说,DBA是一个数据库系统的专业医生。
原文出处:http://www.mysqlops.com/2011/11/03/sql-server-dba.html
TechTarget中国原创内容,原文链接:http://www.searchdatabase.com.cn/showcontent_54849.htm
posted @ 2012-10-13 13:00 abing 阅读(175) | 评论 (0)编辑 收藏

第一种:(Thread)

package com.abin.lee.servlet.mythread.thread;

public class Mythread extends Thread{
 private String name;
 public Mythread(String name) {
  this.name=name;
 }
 public void run() {
  synchronized(this.name){
   System.out.println("开始时间:"+System.currentTimeMillis()+",线程名字:"+Thread.currentThread().getName());
   System.out.println("name="+name);
   System.out.println("结束时间:"+System.currentTimeMillis()+",线程名字:"+Thread.currentThread().getName());
 
  }
 }
 
}



测试代码:

package com.abin.lee.servlet.mythread.thread;

public class MythreadTest {
 public static void main(String[] args) {
  Mythread mythread1=new Mythread("ManyThread");
  Mythread mythread2=new Mythread("ManyThread");
  mythread1.start();
  mythread2.start();
 }

}




第二种:(Runnable)

package com.abin.lee.servlet.mythread.runnable;

public class MyRunnable implements Runnable{
 private String name;
 public MyRunnable(String name) {
  this.name=name;
 }
 public synchronized void run(){
   System.out.println("开始时间:"+System.currentTimeMillis()+",线程名字:"+Thread.currentThread().getName());
   System.out.println("name="+name);
   try {
    Thread.sleep(3000);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   System.out.println("结束时间:"+System.currentTimeMillis()+",线程名字:"+Thread.currentThread().getName());
 }
}




测试代码:

package com.abin.lee.servlet.mythread.runnable;

public class MyRunnableTest {
 public static void main(String[] args) {
  MyRunnable myRunnable=new MyRunnable("ManyThread");
  Thread thread1=new Thread(myRunnable);
  Thread thread2=new Thread(myRunnable);
  thread1.start();
  thread2.start();
 }
}




第三种:(Callable)这种说明一下,这个实现多线程的方式是在JDK1.5引进的,在java.util.concurrent.Callable  这个并发包下面,并且提供同步返回结果的多线程。

package com.abin.lee.servlet.mythread.callable;

import java.util.concurrent.Callable;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class MyCallable implements Callable<String>{
 private String name;
 public MyCallable(String name) {
  this.name=name;
 }
 public String call() throws Exception {
  Lock lock=new ReentrantLock();
  lock.lock();
  String result="";
  try {
   System.out.println("开始时间:"+System.currentTimeMillis()+",线程名字:"+Thread.currentThread().getName());
   System.out.println("name="+name);
   if(name.equals("ManyThread")){
    result="success";
   }else{
    result="failure";
   }
   try {
    Thread.sleep(3000);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   System.out.println("结束时间:"+System.currentTimeMillis()+",线程名字:"+Thread.currentThread().getName());
 
  } catch (Exception e) {
   e.printStackTrace();
  }finally{
   lock.unlock();
  }

   return result;
  
 }
 
}




测试代码:

package com.abin.lee.servlet.mythread.callable;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import org.junit.Test;

public class MyCallableTest {
 @Test
 public void testMyCallable() throws InterruptedException, ExecutionException{
  ExecutorService executor=Executors.newFixedThreadPool(3);
  MyCallable myCallable=new MyCallable("ManyThread");
  Future future1=executor.submit(myCallable);
  System.out.println("future1="+future1.get());
  Future future2=executor.submit(myCallable);
  System.out.println("future2="+future2.get());
  Future future3=executor.submit(myCallable);
  System.out.println("future3="+future3.get());
  
 }

}

测试结果:

开始时间:1350056647659,线程名字:pool-1-thread-1
name=ManyThread
结束时间:1350056650661,线程名字:pool-1-thread-1
future1=success
开始时间:1350056650661,线程名字:pool-1-thread-2
name=ManyThread
结束时间:1350056653661,线程名字:pool-1-thread-2
future2=success
开始时间:1350056653662,线程名字:pool-1-thread-3
name=ManyThread
结束时间:1350056656663,线程名字:pool-1-thread-3
future3=success

 

posted @ 2012-10-12 23:43 abing 阅读(277) | 评论 (0)编辑 收藏

package org.abin.lee.basic.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MyRegex {
public static boolean getResult(String future){
boolean result=false;
String regex="^[0-9a-zA-Z_]+@?[0-9a-zA-Z_]+.[a-zA-z]+$";
// String regex="^1(3[4-9]?|5[018-9]?|8[07-9]?)[0-9]{8}$";
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(future);
result=matcher.matches();
return result;
}
public static void main(String[] args) {
boolean flag=false;
String future="varyall@tom.com";
// String future="13588844873";
flag=getResult(future);
System.out.println("flag="+flag);
}
}
posted @ 2012-10-12 11:12 abing 阅读(209) | 评论 (0)编辑 收藏

public interface RegExpConst {
/**
* 手机号码
* 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
* 联通:130,131,132,152,155,156,185,186
* 电信:133,1349,153,180,189
*/
String MOBILE = "^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$";
/**
* 中国移动:China Mobile
* 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
*/
String CM = "^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}$";
/**
* 中国联通:China Unicom
* 130,131,132,152,155,156,185,186
*/
String CU = "^1(3[0-2]|5[256]|8[56])\\d{8}$";
/**
* 中国电信:China Telecom
* 133,1349,153,180,189
*/
String CT = "^1((33|53|8[09])[0-9]|349)\\d{7}$";
/**
* 大陆地区固话及小灵通
* 区号:010,020,021,022,023,024,025,027,028,029
* 号码:七位或八位
*/
String PHS = "^0(10|2[0-5789]|\\d{3})\\d{7,8}$";
}
posted @ 2012-10-11 23:36 abing 阅读(193) | 评论 (0)编辑 收藏

关键词:正则 oracle 数据库 web 开发 正则表达式 oracle正则表达式 regexp_like f REGEXP_SUBSTR 中文 oracle9 数据库正则表达式 数字 REGEXP_LIKE oracle表达式 10g中的正则表达式 oracle正則表達式 表达式 sql 正则表达式函数 百分号 转义字符 匹配 10g 使用正则表达式 oracle正则表达式regexp_like 正则替换 正则表达 字母数字组合 regexp_instr "/"的 ORACLE 语法 like 通配符 匹配中文 sql转义除号 POSIX正则表达式 oracle数据库表达式 转义符 regexp_substr $ replace函数 oralce正则表达式 oracle常用字符 转义 数字匹配 alnum 2233 REPLACE INTO oralce数字匹配 11g 子表达式 oralce 使用 0 REGEXP_REPLACE REGEXP_LIKE() 中文字符 字符串匹配 oracle,正则表达式 百分号的转义字符 单字符匹配 9 ORACLE转义 函数 replace 字母 正则表达式 数据库 匹配中文 關鍵 符號 分號 匹配单字符 REGEXP_INSTR sql中百分号 至少出现 匹配一部分内容
本文摘要:
10g正则表达式提高了SQL灵活性。
无关的空白检测,或者分解多个正则组成的字符串等问题。
10g支持正则表达式的四个新函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLACE。
正则表达式代替了老的百分号(%)和通配符(_)字符。
匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
匹配前面的子表达式零次或一次。
目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境。

Oracle 10g正则表达式提高了SQL灵活性。有效的解决了数据有效性, 重复词的辨认, 无关的空白检测,或者分解多个正则组成
的字符串等问题。

Oracle 10g支持正则表达式的四个新函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLACE。
它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。

特殊字符:
'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 'n' 或 'r'。
'.' 匹配除换行符 n之外的任何单字符。
'?' 匹配前面的子表达式零次或一次。
'*' 匹配前面的子表达式零次或多次。
'+' 匹配前面的子表达式一次或多次。
'( )' 标记一个子表达式的开始和结束位置。
'[]' 标记一个中括号表达式。
'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。
'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。
num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。
正则表达式的一个很有用的特点是可以保存子表达式以后使用, 被称为Backreferencing. 允许复杂的替换能力
如调整一个模式到新的位置或者指示被代替的字符或者单词的位置. 被匹配的子表达式存储在临时缓冲区中,
缓冲区从左到右编号, 通过数字符号访问。 下面的例子列出了把名字 aa bb cc 变成
cc, bb, aa.
Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '3, 2, 1') FROM dual;
REGEXP_REPLACE('ELLENHILDISMIT
cc, bb, aa
'' 转义符。

字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。

各种操作符的运算优先级
转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和顺序
| “或”操作

--测试数据
create table test(mc varchar2(60));

insert into test values('112233445566778899');
insert into test values('22113344 5566778899');
insert into test values('33112244 5566778899');
insert into test values('44112233 5566 778899');
insert into test values('5511 2233 4466778899');
insert into test values('661122334455778899');
insert into test values('771122334455668899');
insert into test values('881122334455667799');
insert into test values('991122334455667788');
insert into test values('aabbccddee');
insert into test values('bbaaaccddee');
insert into test values('ccabbddee');
insert into test values('ddaabbccee');
insert into test values('eeaabbccdd');
insert into test values('ab123');
insert into test values('123xy');
insert into test values('007ab');
insert into test values('abcxy');
insert into test values('The final test is is is how to find duplicate words.');

commit;

一、REGEXP_LIKE

select * from test where regexp_like(mc,'^a{1,3}');
select * from test where regexp_like(mc,'a{1,3}');
select * from test where regexp_like(mc,'^a.*e$');
select * from test where regexp_like(mc,'^[[:lower:]]|[[:digit:]]');
select * from test where regexp_like(mc,'^[[:lower:]]');
Select mc FROM test Where REGEXP_LIKE(mc,'[^[:digit:]]');
Select mc FROM test Where REGEXP_LIKE(mc,'^[^[:digit:]]');

二、REGEXP_INSTR

Select REGEXP_INSTR(mc,'[[:digit:]]$') from test;
Select REGEXP_INSTR(mc,'[[:digit:]]+$') from test;
Select REGEXP_INSTR('The price is $400.','$[[:digit:]]+') FROM DUAL;
Select REGEXP_INSTR('onetwothree','[^[[:lower:]]]') FROM DUAL;
Select REGEXP_INSTR(',,,,,','[^,]*') FROM DUAL;
Select REGEXP_INSTR(',,,,,','[^,]') FROM DUAL;

三、REGEXP_SUBSTR

SELECT REGEXP_SUBSTR(mc,'[a-z]+') FROM test;
SELECT REGEXP_SUBSTR(mc,'[0-9]+') FROM test;
SELECT REGEXP_SUBSTR('aababcde','^a.*b') FROM DUAL;

四、REGEXP_REPLACE

Select REGEXP_REPLACE('Joe Smith','( ){2,}', ',') AS RX_REPLACE FROM dual;
Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '3, 2, 1') FROM dual;

SQL> select * from test;

ID MC
-------------------- ------------------------------------------------------------
A AAAAA
a aaaaa
B BBBBB
b bbbbb

SQL> select * from test where regexp_like(id,'b','i'); --不区分数据大小写

ID MC
-------------------- ------------------------------------------------------------
B BBBBB
b bbbbb

#End
posted @ 2012-10-11 20:58 abing 阅读(273) | 评论 (0)编辑 收藏

仅列出标题
共7页: 上一页 1 2 3 4 5 6 7 下一页