如何解析Oracle中以下字符串中「request」的值?如何解析Oracle中的字符串?
<!-- accountId="123" activity="add" request="add user" -->
尺寸和請求的位置是隨機的。
如何解析Oracle中以下字符串中「request」的值?如何解析Oracle中的字符串?
<!-- accountId="123" activity="add" request="add user" -->
尺寸和請求的位置是隨機的。
您可以使用正則表達式來找到這個:
regexp_replace(str, '.*request="([^"]*)".*', '\1')
您可能需要考慮使用'。* \ s + request'開始正則表達式,以便它不匹配'subrequest =「foo」'之類的東西。 – Josh
使用INSTR(givenstring, stringchartosearch,start_position)
查找'request =''的位置並查找'''的結束位置。
然後使用substr(string, starting_position, length)
。
下面是cwallenpoole和克雷格·我的測試變化。對於正則表達式 - 請注意,如果「request =」不存在,則結果將是整個字符串。 user349433部分是那裏,有一個空格「請求=」,在搜索效果一樣好:
SET serveroutput ON
DECLARE
l_string VARCHAR2(100) := '<!-- accountId="123" activity="add" request="add user" -->';
l_result_from_substr VARCHAR2(50);
l_result_from_regexp VARCHAR2(50);
BEGIN
SELECT SUBSTR(l_string, instr(l_string, 'request="') + 9, instr(SUBSTR(l_string,instr(l_string, 'request="')), '"', 2)-1),
regexp_replace(l_string, '.* request="([^"]*)".*', '\1')
INTO l_result_from_substr,
l_result_from_regexp
FROM dual;
dbms_output.put_line('Result from substr: '||l_result_from_substr);
dbms_output.put_line('Result from regexp: '||l_result_from_regexp);
END;
/
請注意等號「=」並不一定要在分配請求變量之後馬上就。因此,搜索「request =」並不完全正確。你應該使用INSTR創建一個基本的有限狀態機,首先找到「請求」,然後找到「=」,...
事實上,你已經以XML註釋的形式將字符串括在尖括號中,這讓我問如果它是XML,你正在處理?下面的答案適用於純字符串,並且適用於XML,但如果它是XML,則使用XMLTYPE可能更健壯。 –