我對正則表達式不太擅長,有一件事情我不太瞭解。Oracle REGEXP_LIKE匹配包含數字的字符串
我有一個字符串:'BSIOC_V6_560',和一個不同的模式列表。我需要得到這個字符串匹配的每個模式。 但我有我的時候,雖然它不會下試匹配:
select 'True' as Response from dual where REGEXP_LIKE('BSIOC_V6_560','BSIOC_V5*');
我必須有一些誤解。有人能給我一個解釋嗎?
我對正則表達式不太擅長,有一件事情我不太瞭解。Oracle REGEXP_LIKE匹配包含數字的字符串
我有一個字符串:'BSIOC_V6_560',和一個不同的模式列表。我需要得到這個字符串匹配的每個模式。 但我有我的時候,雖然它不會下試匹配:
select 'True' as Response from dual where REGEXP_LIKE('BSIOC_V6_560','BSIOC_V5*');
我必須有一些誤解。有人能給我一個解釋嗎?
@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加上別的東西......
我希望你會發現它的幫助!
謝謝!我現在得到爲什麼這不按我想要的方式工作。 – Vizul
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$');
結果:真
這是一個有效的更正,但請您詳細說明爲什麼'5 *'與'6'匹配,量詞在正則表達式中的工作原理以及爲什麼'。*'匹配任意數量的字符?另外,請格式化您的代碼,以便每個人都可以閱讀。 – Mariano
你能否補充一下,你確實需要比較一下。例如字符串以'BSIOC_V5'開始,字符串包含'BSIOC_V5'等。 –
@FrankOckenfuss這兩種情況都可能發生。有時它會從這個字符串開始,有時它會包含它,使得模式像''* BSIOC_V5 *''。希望我已經清楚了 – Vizul