2017-04-21 95 views
0

一個變量我想包括以下字符串的Perl腳本價值爲$的QName:聲明從字符串

隊列(SYSTEM.SELECTION.VALIDATION.QUEUE)

所以我試着包括SYSTEM.SELECTION.VALIDATION.QUEUE$QName,如下代碼:

my ($QName) = /QUEUE\((\w+)\)/; 
print "$QName \n"; 

然而,該代碼不能成功地產生輸出。

輸出應該是:

SYSTEM.SELECTION.VALIDATION.QUEUE

+2

的'\ w'不符點。你可以用括號中的所有內容匹配'[^()]',一個否定的括號內的字符類匹配任何字符,但匹配任何字符('和')':my($ QName)=/QUEUE \(([^()] + )\;' –

回答

3

你需要在你的模式中添加點:

my ($QName) = /QUEUE\(([\w.]+)\)/; 
#     ^^^ 
#       | 
#       `--You're missing this dot: 
# The "SYSTEM.SELECTION.VALIDATION.QUEUE" value comprises letters AND DOTS 

演示:https://ideone.com/L4FESo

+0

@Dmitry_Egorov非常感謝,我接受你的回答,我可以知道這個正則表達式中[]的功能是什麼? – MrAZ

+0

這不會編譯。 – Toto

+0

@Toto:它在什麼環境下編譯失敗?對於[IdeOne](https://ideone.com/L4FESo)以及使用我爲x86_64-msys-thread-multi構建的本地'perl 5版本22,subversion 0(v5.22.0),' –

0

你想要達到的目標並不是很清楚,但是我是顧ESS你想:

$input_string = 'QUEUE(SYSTEM.SELECTION.VALIDATION.QUEUE)'; 
my ($QName) = $input_string =~ /QUEUE\((.+?)\)/; 
print $QName,"\n"; 

輸出:

SYSTEM.SELECTION.VALIDATION.QUEUE 
+0

是的,這個輸出即時尋找..謝謝。 – MrAZ

+0

感謝downvote,我知道爲什麼嗎? – Toto

+0

它不是我downvote – MrAZ