2012-02-22 71 views
1

嘿,我一直在使用这个工作一段时间。我似乎无法得到它。匹配双符号

下面是我在比赛中迄今

(@[^{2,}+)([^(\s\W\d{2}]+)(\b) 

http://rubular.com/r/zlx3j00Wjl

虽然这也不例外期间。

我基本上需要匹配这个。

@function.name(PARAM)

我只需要匹配function.name。这样做。

http://rubular.com/r/hWMB72LsWT

我不想匹配这个

@@ function.name(PARAM)
你好@@ test.com`

不知道如果任何人有任何想法。谢谢您的帮助。

回答

1

这是我在它去(here it is on Rubular ):

(?<[email protected])@(\w+(?:\.\w+)*)\([^)]*\) 

解释:

(?<[email protected])@   # an '@' not preceded by an '@' 
(\w+(?:\.\w+)*) # any number of xxx.xxx.xxx, captured into a group 
\([^)]*\)  # brackets, containing anything that isn't a closing bracket 

由于这是Ruby,因此您可能不在乎匹配的括号。在这种情况下,你可以删除最后一部分。

+0

谢谢你,这是让我到那里的最后模式。我将它修改为(?<![\ w,@])@(\ w +(?:\。\ w +)*)以防止突出显示(这是textmate)。非常感谢。 – 2012-02-22 13:44:20

3

您可以使用负面预测:@([email protected])匹配@后面跟着另一个@

+0

你实际上想要消极的后顾之忧,因为你想匹配'@'后面的东西:'(?<!@)@ ...' – porges 2012-02-22 07:42:56

+0

感谢您的帮助 – 2012-02-22 13:44:31

1

试试这个:

(?:^|\s)@+([^(]+) 

您将在第一组中有function.matchfunction.name,将不匹配[email protected]@test.com。 Rubular:

+0

感谢您的帮助。 – 2012-02-22 13:44:43

+0

当然,很乐意帮忙! – 2012-02-23 02:53:50

1

试试这个

(?!.*@@)^@([^()\s]+)\b 

看到它here on Rubular

  • 我删除了一些支架从你的表情
  • 我删除从乐量词ading @
  • (?!.*@@)negative lookahead assertion。如果它在连续两个字符串中找到两个字符,它将会失败。

我不确定你的要求,如果总是有一组括号在最后,那么你不需要你的字边界。如果可以有类似的字符串不带括号,你不想匹配,那么我想补充的另一个先行,以确保这一说法:

?!.*@@)^@([^()\s]+)(?=\() 

看到它here on Rubular