我读这question,我试图做一种相反的。这张海报想要捕捉有关连接的信息,我想在所有连接名称上匹配。考虑这个文件:用正则表达式解析tnsnames.ora中只得到名字
SOMESCHEMA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = REMOTEHOST)(PORT = 1234))
)
(CONNECT_DATA =
(SERVICE_NAME = REMOTE)
)
)
# comment
MYSCHEMA.world =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = MYHOST)(PORT = 1234))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MYSERVICE.LOCAL)
) )
##comment
##comment
MY.OTHER.SCHEMA=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MYHOST)(PORT=1234)))(CONNECT_DATA=(SERVICE_NAME=MYSERVICE.REMOTE)))
SOMEOTHERSCHEMA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = LOCALHOST)(PORT = 1234)) ) (CONNECT_DATA = (SERVICE_NAME = LOCAL) ) )
的RexEx规则应该足够简单,我只是用RegExs可怕。它应该是:
- 匹配任何单词(“”不打破),其后面是‘=’,不考虑空间,这不是说明,ADDRESS_LIST,地址,协议,主机,端口CONNECT_DATA或服务名称。
- 忽略以#开头的单词,再次忽略空格。
任何正则表达式的专家,可以帮助这一点?如果有帮助,可以通过先删除代码中的空白来消除“无视空格”要求。
结果应符合:
- SOMESCHEMA
- MYSCHEMA.world
- MY.OTHER.SCHEMA
- SOMEOTHERSCHEMA
我们绝对不能忽视任何一个“(”?这将使它很容易的。 – Tadgh
是的。这将是一个有效的规则。 – Paul
之前他们总是有字的架构在其中 – Tadgh