到目前为止,我有完美的正则表达式:
(?:(?<=\s)|^)#(\w*[A-Za-z_]+\w*)
它找到以散列标记开头的任何单词(例如#lolz
但不是hsshs #jdjd)
问题是我还希望它匹配括号。所以,如果我有这个,它将匹配:
(#lolz
哇)
或
(哇#cool)
或
(#cool)
关于如何制作或使用我的正则表达式来解决这个问题的任何想法?
答案 0 :(得分:3)
以下似乎对我有用......
\(?#(\w*[A-Za-z_]+\w*)\)?
答案 1 :(得分:3)
你在上下文中使用以下内容的方式是矫枉过正..
\w*[A-Za-z_]\w*
仅 \w
匹配字符(a-z
,A-Z
,0-9
,_
)。并且没有必要使用非捕获组(?:
来围绕您的lookbehind断言。
我相信以下就足够了。
(?<=^|\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
如果你愿意,你也可以在这里使用负面的背后隐藏。
(?<![^\s])\(?#(\w+)\)?