2017-04-21 68 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