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



我对正则表达式很陌生。 我被困在一个特定的问题上,我无法继续。 非常感谢正则表达式专家的指导。

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(我尝试捕获和重复正则表达式概念(重复最后一行之前将其作为一个组(,但仍然没有实现输出。

请对此提出任何建议或见解?

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

^TYPE w+s+ISs+RECORDs+([^()]*)

请参阅正则表达式演示。

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

若要管理嵌套括号,可以将([^()]*)替换为(((?:[^()]++|(?1))*))。请参阅此正则表达式演示。

如果只想匹配到最后;的任何文本,请使用^TYPE w+s+ISs+RECORDs+(([sS]*))。请参阅此演示。

最新更新