#
解決方法如下: 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
|