3

到目前为止,我有这个完美的正则表达式:

(?:(?<=\s)|^)#(\w*[A-Za-z_]+\w*)

它会找到以哈希标签开头的任何单词(例如#lolz但不是 hsshs#jdjd)

问题是我也希望它匹配括号。所以如果我有这个,它将匹配:

(#lolz哇)

或(哇#cool)

或者 (#cool)

关于如何制作或使用我的正则表达式来这样工作的任何想法?

4

2 回答 2

3

以下似乎对我有用......

\(?#(\w*[A-Za-z_]+\w*)\)?
于 2013-11-04T23:19:31.850 回答
3

您在上下文中使用以下内容的方式是矫枉过正..

\w*[A-Za-z_]\w*

\w单独匹配单词字符(a-z, A-Z, 0-9, _)。并且没有必要在这里使用非捕获组(?:来包裹您的后视断言。

我相信以下内容本身就足够了。

(?<=^|\s)\(?#(\w+)\)?

正则表达式:

(?<=         look behind to see if there is:
 ^           the beginning of the string
 |           OR
  \s         whitespace (\n, \r, \t, \f, and " ") 
)            end of look-behind
\(?          '(' (optional (matching the most amount possible))
 #           '#'
  (          group and capture to \1:
   \w+       word characters (a-z, A-Z, 0-9, _) (1 or more times)
  )          end of \1
 \)?         ')' (optional (matching the most amount possible))

live demo

如果您愿意,您也可以在此处使用否定的lookbehind。

(?<![^\s])\(?#(\w+)\)?
于 2013-11-04T23:35:59.583 回答