匹配双符号

时间:2012-02-22 01:36:18

标签: regex

嘿伙计们我已经和这个人一起工作了一会儿。我似乎无法得到它。

这是我到目前为止所拥有的

(@[^{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`

不知道是否有人有任何想法。谢谢你的帮助。

4 个答案:

答案 0 :(得分:3)

您可以使用否定前瞻:@(?!@)匹配@,而不是其他@

答案 1 :(得分:1)

试试这个:

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

第一组中的function.matchfunction.name将与hello@@test.com不匹配。 Rubular:

答案 2 :(得分:1)

试试这个

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

here on Rubular

  • 我从你的表达中删除了一些括号
  • 我从前导@
  • 中移除了量词
  • (?!.*@@)negative lookahead assertion。如果它在字符串中找到连续两个@个字符的任何位置,它将失败。

我不确定你的要求,如果一直有一组括号,那么你不需要你的单词边界。如果可能有类似的字符串没有您不想匹配的括号,那么我会添加另一个前瞻以确保这个断言:

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

here on Rubular

答案 3 :(得分:1)

我在这里(here it is on Rubular):

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

说明:

(?<!@)@         # 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,您可能不关心匹配括号。在这种情况下,您可以删除最后一部分。