到目前为止,我有这个完美的正则表达式:
(?:(?<=\s)|^)#(\w*[A-Za-z_]+\w*)
它会找到以哈希标签开头的任何单词(例如#lolz
但不是 hsshs#jdjd)
问题是我也希望它匹配括号。所以如果我有这个,它将匹配:
(#lolz
哇)
或(哇#cool)
或者
(#cool)
关于如何制作或使用我的正则表达式来这样工作的任何想法?
以下似乎对我有用......
\(?#(\w*[A-Za-z_]+\w*)\)?
您在上下文中使用以下内容的方式是矫枉过正..
\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))
如果您愿意,您也可以在此处使用否定的lookbehind。
(?<![^\s])\(?#(\w+)\)?