#
解决方法如下: 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"。 至此,问题解决。
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
启动防火墙
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
一、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
在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包
在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
第一种:(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
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); } }
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}$"; }
关键词:正则 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
|