2014-04-02 40 views
0

在Oracle 11g中,我需要檢查進行檢查,以查看是否存在以下格式爲真(通過正則表達式即):檢查在Oracle 11g中一個特定的字符串格式

PaaaaE0% 
PaaaaD2% 

其中該值被的以下格式:

P (followed by any 4 alphanumeric digits) E or D (followed by atleast 1 numeric digit) 

作爲4個字母數字數字的一部分,如果爲alpha,那麼它們需要是大寫。

有關如何使用正則表達式檢查此格式的任何幫助將非常有用。

現在,我已經試過類似:

REGEXP_LIKE('PWOOOE12s3','[P][:alnum:]{4}[ED][:digit:]{1}') 

感謝。

+0

請查看更新後的問題,但不能確定是否正確,並不能確定如何確保大寫。 – tonyf

回答

1

你八九不離十:

  • 匹配包機類應寫爲[[:digit:]]。注意匹配列表的外括號。
  • {n}完全匹配n發生,使用+匹配一個或多個發生。
  • [:upper:]匹配大寫字母,匹配列表[[:upper:]|[:digit:]]匹配任何大寫字母或數字。
  • 我還添加了^錨只匹配從字符串的開頭。如果它不符合你的目的,你可以把它排除在外。

這應該完成這項工作:

[email protected]> !cat so40.sql 
with 
data_ as (
    select 1 id, 'PWOOOE12s3' str from dual union 
    select 2 id, 'PwoooE12s3' str from dual 
) 
select id, str from data_ 
where regexp_like(str, '^P[[:upper:]|[:digit:]]{4}[ED][[:digit:]]+') 
; 
[email protected]> @so40 

     ID STR 
---------- ---------- 
     1 PWOOOE12s3 

[email protected]> 
+0

是的,我注意到我錯過了。現在更新。 – user272735

+0

工作過。 – tonyf