我讀這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