diff --git a/nonebot/rule.py b/nonebot/rule.py index 2802fdd8..c950c449 100644 --- a/nonebot/rule.py +++ b/nonebot/rule.py @@ -239,7 +239,9 @@ def command(*cmds: Union[str, Tuple[str, ...]]) -> Rule: def regex(regex: str, flags: Union[int, re.RegexFlag] = 0) -> Rule: """ :说明: - 根据正则表达式进行匹配 + 根据正则表达式进行匹配。 + + 可以通过 ``state["_matched"]`` 获取正则表达式匹配成功的文本。 :参数: * ``regex: str``: 正则表达式 * ``flags: Union[int, re.RegexFlag]``: 正则标志 @@ -252,8 +254,13 @@ def regex(regex: str, flags: Union[int, re.RegexFlag] = 0) -> Rule: pattern = re.compile(regex, flags) async def _regex(bot: Bot, event: Event, state: dict) -> bool: - return bool(pattern.search(str(event.message))) - + matched = pattern.search(str(event.message)) + if matched: + state["_matched"] = matched.group() + return True + else: + state["_matched"] = None + return False return Rule(_regex)