gpt4 book ai didi

regex - 使用正则表达式解析 tnsnames.ora 以获取名称

转载 作者:行者123 更新时间:2023-12-01 09:03:29 26 4
gpt4 key购买 nike

我正在读这个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。
  • 忽略以 # 开头的单词,同样忽略空格。

有没有 RegEx 专家可以帮助解决这个问题?如果有帮助,可以通过先删除代码中的空格来消除“忽略空格”的要求。

结果应该匹配:

  • SOMESCHEMA
  • MySCHEMA.world
  • 我的.其他.SCHEMA
  • 其他架构

最佳答案

这应该可以做到。

http://rubular.com/r/o9AjrFUq5q

^([^#()\W ][a-zA-Z.]*(?:[.][a-zA-Z]*\s?=)?)

确保第一个字符不是#() 或单词边界。

抓取最后一个句点之前的所有内容,然后是 = 符号前的可选空格。有点复杂,但它似乎工作。

关于regex - 使用正则表达式解析 tnsnames.ora 以获取名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12605415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com