我正在阅读这篇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规则应该足够简单,我只是对RegEx感到恐惧。它应该是:
- 匹配后跟“=”的任何单词(不中断“.”),忽略空格,即不是DESCRIPTION、ADDRESS_LIST、ADDRESS、PROTOCOL、HOST、PORT、CONNECT_DATA或SERVICE NAME。
- 忽略前面有#的单词,同样忽略空格。
有任何RegExMaven可以帮助解决这个问题吗?如果有帮助的话,可以通过首先删除代码中的空格来消除“忽略空格”的要求。
结果应匹配:
- 索梅施马
- MYSCHEMA.world
- MY.OTHER.SCHEMA
- Someotherschema
3条答案
按热度按时间v6ylcynt1#
这个应该可以了
http://rubular.com/r/o9AjrFUq5q
确保第一个字符不是#()或单词边界。
抓取到最后一个句点的所有内容,然后在=符号之前添加一个可选空格。有点复杂,但似乎可以工作。
nukf8bse2#
我知道这是一个老主题,但我想在Regex不适用时添加一个有用的参考。您可以使用ANTLR解析整个tnsname.ora(以及sqlnet.ora等)。
您可以在www.example.com的grammar list中找到this grammar的引用antlr3.org
nfzehxib3#
您可以使用oracle驱动程序jar中的
oracle.net.jdbc.nl.NLParamParser
来提供帮助