正则表达式

dws2004 2012-02-03 11:08:29
有一表a 列divisionremark的内容如下
公元1123––1125 
县境地处北纬3733’~37‘42,、东经114‘26,~114~43,之间,
被誉为“元代第一庙”与“开沽(直沽、天津)妈祖”,成为天津城市形成与发展的历史见证。<br />
这就是天津的发祥之地——南开。<br />


现在我想截取html标记的那部分字符串,如下
–  
’ ‘
“ ”


以&开始;结束的算一个字符串
每一行尽量不要重复匹配的 如–– 只记第一个就行




求方法,不用正则表达式能完成也ok

...全文
185 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
minitoy 2012-02-04
  • 打赏
  • 举报
回复
写了下,超繁,还是写个function吧。
create or replace function func_get_html_code(i_str varchar)
return varchar2 as
n_cnt number;
n_count number;
v_str_cut varchar2(4000);
v_str_mid varchar2(4000);
v_str_result varchar2(4000);
begin
select length(i_str) - length(replace(i_str, chr(10), '')) +
length(i_str) - length(replace(i_str, '&', ''))
into n_cnt
from dual;
n_count := 1;
loop
exit when n_count > n_cnt;
select regexp_substr(i_str,
'(&[a-zA-Z]*;|' || chr(10) || ')',
1,
n_count)
into v_str_cut
from dual;
if v_str_cut = chr(10) then
v_str_mid := v_str_mid || v_str_cut;
v_str_result := v_str_result || v_str_mid;
v_str_mid := null;
else
select v_str_mid || case
when instr(nvl(v_str_mid, ' '), v_str_cut) = 0 then
v_str_cut
end
into v_str_mid
from dual;
end if;
n_count := n_count + 1;
end loop;
if v_str_cut != chr(10) then
v_str_result := v_str_result || v_str_mid;
end if;
return v_str_result;
end;
minitoy 2012-02-04
  • 打赏
  • 举报
回复
没中文环境。说下思路吧。
类似楼上把 形式的串以及回车提取出来。
数据未两列,level,及截取的字符串。
然后以这个表为虚拟表,分组进行distinct及拼接
minitoy 2012-02-04
  • 打赏
  • 举报
回复
会不会出现变形的情况。
比如一个&变形为&amp;amp;
我心飞翔 2012-02-03
  • 打赏
  • 举报
回复
实测数据:

CREATE TABLE T107
(
ID VARCHAR2(20),
Divisionremark VARCHAR2(3000)
);

INSERT INTO T107 VALUES('01', '公元1123––1125 县境地处北纬3733’~37‘42,、东经114‘26,~114~43,之间,被誉为“元代第一庙”与“开沽(直沽、天津)妈祖”,成为天津城市形成与发展的历史见证。<br />这就是天津的发祥之地——南开。<br />');


实测结果:
我心飞翔 2012-02-03
  • 打赏
  • 举报
回复
请参考:

SELECT regexp_substr(Divisionremar, '[^\&\;$]+', 1, LEVEL) AS 分隔符
FROM a CONNECT BY LEVEL <= 子查询获得&出现的次数

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧