2015-09-24 79 views
0

我對正則表達式不太擅長,有一件事情我不太瞭解。Oracle REGEXP_LIKE匹配包含數字的字符串

我有一個字符串:'BSIOC_V6_560',和一個不同的模式列表。我需要得到這個字符串匹配的每個模式。 但我有我的時候,雖然它不會下試匹配:

select 'True' as Response from dual where REGEXP_LIKE('BSIOC_V6_560','BSIOC_V5*'); 

我必須有一些誤解。有人能給我一個解釋嗎?

+0

你能否補充一下,你確實需要比較一下。例如字符串以'BSIOC_V5'開始,字符串包含'BSIOC_V5'等。 –

+0

@FrankOckenfuss這兩種情況都可能發生。有時它會從這個字符串開始,有時它會包含它,使得模式像''* BSIOC_V5 *''。希望我已經清楚了 – Vizul

回答

0

@Jan答案是正確的,但只回答你的問題..

  • 字符*(星號)表示零次或多次重複 ..在您的情況下BSIOC_V5,所以是的!你有0次重複!這句話也返回true:

    select 'True' as Response from dual where REGEXP_LIKE('BSIOC_V6_560', 'X*');

  • 字符.(點)指任何字符,所以.*指任何字符的零次或多次重複...所以...

    select 'True' as Response from dual where REGEXP_LIKE('BSIOC_V6_560', 'BSIOC_V5'); 不符合您無法找到BSIOC_V5

    select 'True' as Response from dual where REGEXP_LIKE('BSIOC_V6_560', 'BSIOC_V.'); 是的! BSIOC_V加任何字符

    select 'True' as Response from dual where REGEXP_LIKE('BSIOC_V6_560', 'BSIOC_V5.*'); 不匹配,你不能找到BSIOC_V5加上別的東西......

我希望你會發現它的幫助!

+0

謝謝!我現在得到爲什麼這不按我想要的方式工作。 – Vizul

0
select 'True' as Response from dual where REGEXP_LIKE('BSIOC_V6_560','BSIOC_V5.*'); 

問題是,開放式模式是隱式子串匹配。

select 'True' as Response from dual where REGEXP_LIKE('abc','b'); 

結果:真

select 'True' as Response from dual where REGEXP_LIKE('abc','b$'); 

結果:空

select 'True' as Response from dual where REGEXP_LIKE('abc','c$'); 

結果:真

+0

這是一個有效的更正,但請您詳細說明爲什麼'5 *'與'6'匹配,量詞在正則表達式中的工作原理以及爲什麼'。*'匹配任意數量的字符?另外,請格式化您的代碼,以便每個人都可以閱讀。 – Mariano

相關問題