2011-06-15 51 views
2

我想要使用正则表达式来获取括号内的最后一个单词,如果内部超过1个单词。在任何情况下将Bazpreg_match - 模式 - 括号内的最后一个单词

! KEYWORD (\Foo \Bar \Ban \Baz) "/" "Hello" 
! KEYWORD (\Foo \Bar \Baz) "/" "Hello" 
! KEYWORD (\Foo \Baz) "/" "Hello" 

感谢

+0

@Luzhin:问题已更新。但是,工作太多了...... – JesseJ 2011-06-15 13:49:28

回答

4

一种可能性是

.*\W(\w+)\s*\) 

说明

.*  #1 runs to the end of the string 
\W  #2 backtracks to a non-"word character" 
(\w+) #3 captures all following "word characters" into group 1 
\s* #4 optional white space 
\)  #5 mandatory literal closing paren 

此正则表达式的作品,因为它积极利用回溯找到“的最后发生的事情“在一个字符串中(即重复步骤#2直到表达式的其余部分可以匹配 - 或者整个表达式失败)。

在这种情况下东西是一个由非单词字符开头的单词字符序列,后面跟着一个关闭paren。

+0

@stereofrog:你说得对。但是,我不知道是否可以在字符串的早期发生关闭,(尽管假设不可能是安全的)。这就是为什么我选择使用'。*',并且这使'\ W'成为必需。 – Tomalak 2011-06-15 14:05:35