我正在阅读question,我正试图做相反的事情。这张海报想要捕获有关连接的信息,我希望在所有连接名称上匹配。考虑一下这个文件:
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感到非常恐怖。它应该是:
任何可以帮助解决这个问题的RegEx专家?如果有帮助,可以通过首先删除代码中的空格来消除“无视空格”要求。
结果应匹配:
答案 0 :(得分:5)
应该这样做。
http://rubular.com/r/o9AjrFUq5q
^([^#()\W ][a-zA-Z.]*(?:[.][a-zA-Z]*\s?=)?)
确保第一个字符不是#()或字边界。
抓住所有内容到最后一段时间,然后在=符号之前选择一个可选空格。有点复杂,但它似乎工作。
答案 1 :(得分:0)
我知道这是一个古老的话题,但是当Regex无法实现时,我想添加一个有用的参考。您可以使用ANTLR来解析整个tnsnames.ora(以及sqlnet.ora等)。
您可以在antlr3.org的this grammar找到对grammar list的引用