PL / SQL字符串转换-正则表达式

时间:2018-10-25 09:12:47

标签: regex

我对regex非常陌生。我被困在一个无法解决的特定问题上。 regex专家的指导深表感谢。

1)下面是pl / sql字符串,需要使用正则表达式进行匹配。

TYPE T_OM_EPV2_LINE_REC_TYPE
IS
RECORD
(
ORDER_NO PS_OM_EPV2_LINE.ORDER_NO%type,
OM_SUBMIT_NBR PS_OM_EPV2_LINE.OM_SUBMIT_NBR%type);

2)这是我要使用的正则表达式

^TYPE [\w]+[\s]IS[\s]RECORD[\s]\([\s]([\w]+ [\w]+\.[\w]+%type.)

3)我可以匹配,

TYPE T_OM_EPV2_LINE_REC_TYPE
IS
RECORD
(
ORDER_NO PS_OM_EPV2_LINE.ORDER_NO%type,

但不是,OM_SUBMIT_NBR PS_OM_EPV2_LINE.OM_SUBMIT_NBR%type(最后一行)

4)根本原因是正则表达式尝试匹配最后一行,但缺少前四行。

5)我尝试捕获并重复正则表达式的概念(以将行作为组重复最后一行),但是仍然没有实现输出。

请问对此有何建议或见解?

1 个答案:

答案 0 :(得分:0)

由于最后一行没有嵌套括号,因此可以使用

^TYPE \w+\s+IS\s+RECORD\s+\([^()]*\)

请参见regex demo

详细信息

  • ^-字符串或行的开头
  • TYPE -文字子字符串
  • \w+-1个以上的字符字符
  • \s+-超过1个空格
  • IS-文字子字符串
  • \s+-超过1个空格
  • RECORD-文字子字符串
  • \s+-超过1个空格
  • \(-一个(字符
  • [^()]*-除()以外的0多个字符
  • \)-一个)字符。

要管理嵌套括号,可以将\([^()]*\)替换为(\((?:[^()]++|(?1))*\))。参见this regex demo

如果您只想匹配最后一个;之前的任何文本,请使用^TYPE \w+\s+IS\s+RECORD\s+(\([\s\S]*\))。参见this demo

相关问题