我有一個以下面的鍵值格式存儲在表中的字符串:「Key1☺Value1☺Key2☺Value2☺KeyN☺ValueN☺」。 給定一個關鍵點如何提取值?正則表達式是處理這個問題的最簡單方法嗎?我是PL/SQL和Regex的新手。使用正則表達式的PL/SQL鍵值字符串
0
A
回答
0
在這種情況下,我只會使用常規拆分並遍歷所得到的數組。
public string GetValue(string keyValuePairedInput, string key, char separator)
{
var split = keyValuePairedInput.Split(separator);
if(split.Lenght % 2 == 1)
throw new KeyWithoutValueException();
for(int i = 0; i < split.Lenght; i += 2)
{
if(split[i] == key)
return split[i + 1];
}
throw new KeyNotFoundException();
}
(這是沒有編制,而不是PL/SQL,無論如何,把它當作僞☺)
OK我聽到你的意見...... 利用的PL/SQL函數,你可能會能夠使用這樣的事情:
select 'key' as keyValue,
(instr(keyValueStringField, keyValue) + length(keyValue) + 1) as valueIndex,
substr(keyValueStringField, valueIndex, instr(keyValueStringField, '\1', valueIndex) - valueIndex) as value
from Table
+0
這看起來像java,而不是pl/sql。 – Rodney 2009-11-19 20:33:47
0
對於這種類型的字符串切片和PL/SQL切割你可能會使用正則表達式。 Oracle有許多可以使用的regular expression functions。最常用的是REGEXP_LIKE
,它與LIKE
運營商非常相似,但可進行RegEx匹配。
但是你可能需要使用REGEXP_INSTR
找到位置,其中分離,然後用SUBSTR
功能在匹配的位置切了繩子。您也可以考慮使用REGEXP_SUBSTR
,它可以一步完成RegEx匹配和切片。
0
作爲替代正則表達式...
假設你有一個輸入像這樣: 鍵1,值1 |鍵2,值2 |鍵3,值3
你可以使用一些PL/SQL作爲如下圖所示:
FUNCTION get_value_by_key
(
p_str VARCHAR2
, p_key VARCHAR2
, p_kvp_separator VARCHAR2
, p_kv_separator VARCHAR2
) RETURN VARCHAR2
AS
v_key VARCHAR2(32767);
v_value VARCHAR2(32767);
v_which NUMBER;
v_cur VARCHAR(1);
BEGIN
v_which := 0;
FOR i IN 1..length(p_str)
LOOP
v_cur := substr(p_str,i,1);
IF v_cur = p_kvp_separator
THEN
IF v_key = p_key
THEN
EXIT;
END IF;
v_key := '';
v_value := '';
v_which := 0;
ELSIF v_cur = p_kv_separator
THEN
v_which := 1;
ELSE
IF v_which = 0
THEN
v_key := v_key || v_cur;
ELSE
v_value := v_value || v_cur;
END IF;
END IF;
END LOOP;
IF v_key = p_key
THEN
RETURN v_value;
END IF;
raise_application_error(-20001, 'key not found!');
END;
要獲取價值「鍵2」你可以這樣做(假設你的函數是在一個包叫做test_pkg):
SELECT test_pkg.get_value_by_key('Key1,Value1|Key2,Value2|Key3,Value3','Key2','|',',') FROM dual
相關問題
- 1. 字符串使用正則表達式替換正則表達式字符類
- 2. 正則表達式使用關鍵字拆分字符串
- 3. 正則表達式的正則表達式的Java字符串
- 4. Python的正則表達式掩蓋了字符串鍵值對
- 5. 使用正則表達式搜索分隔鍵值字符串中的值
- 6. 正則表達式正則表達式匹配字符串
- 7. Perl正則表達式用正則表達式的子串替換字符串
- 8. 正則表達式的字符串中的鍵盤鍵
- 9. 正則表達式引用字符串
- 10. 正則表達式使用正則表達式來找到子字符串
- 11. 使用正則表達式分割鍵=值組中的字符串(Java)
- 12. 用於區分字符串鍵的正則表達式
- 13. Java使用正則表達式在字符串中查找值
- 14. 如何提取從字符串值使用正則表達式
- 15. 使用正則表達式從字符串中提取值
- 16. 正則表達式Scala的字符串
- 17. 正則表達式的字符串
- 18. PHP字符串的正則表達式
- 19. Java的正則表達式字符串
- 20. 字符串的正則表達式
- 21. Mathjax的正則表達式字符串
- 22. 字符串中的正則表達式
- 23. 正則表達式中的字符串
- 24. Oracle正則表達式的字符串
- 25. 非字符串的正則表達式
- 26. 正則表達式的字符串
- 27. 使用正則表達式和規則的字符串操作
- 28. 正則表達式模式字符串使用標識符
- 29. 使用Lookahead匹配使用正則表達式的字符串
- 30. 正則表達式爲字符串
我在鍵值格式中看到了「笑臉」。那是什麼性格? – dcp 2009-11-19 20:21:39
它是字符1 – Rodney 2009-11-19 20:30:33
你的意思是管?例如 Key1,Value1 | Key2,Value2 | Key3,Value3 – dcp 2009-11-19 20:45:57