Skip to content

Commit

Permalink
docs(AdvanceReply): 补充正则表达式规范,提示使用 regex101 网站 (#157)
Browse files Browse the repository at this point in the history
* ci(linter): 推荐使用 vscode 的 markdownlint 插件

* docs(AdvanceReply): 补充正则表达式规范,提示使用 regex101 网站
  • Loading branch information
Xiangze-Li authored Apr 30, 2024
1 parent 540ca10 commit 62ee98d
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 32 deletions.
5 changes: 5 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"recommendations": [
"davidanson.vscode-markdownlint"
]
}
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,16 @@ VitePress 驱动的海豹骰官方使用手册。

## Lint

提交前请务必使用 markdownlint 进行检查
提交前请务必使用 markdownlint 进行检查,不满足格式要求的修改无法合并入主仓库。

```shell
pnpm install
pnpm run lint:md
pnpm run lint:md:fix // 检查并进行部分自动修复
```

对于 VS Code 用户,请使用 [markdownlint](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint) 插件获取编辑器警告。这一插件已经被添加到本项目的推荐插件中,只需在打开本项目时按 VS Code 的提示安装即可。

## 排版

文档排版应当遵循 [中文文案排版指北](https://github.com/sparanoid/chinese-copywriting-guidelines) 的规范。
Expand Down
67 changes: 36 additions & 31 deletions docs/advanced/edit_reply.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,14 @@ title: 编写自定义回复

本节将展示自定义回复编写的进阶部分,请善用侧边栏和搜索,按需阅读文档。

在部分内容中,我们假定你了解海豹变量机制和正则表达式。如果你对正则表达式还很陌生,可以阅读以下教程或在互联网自行搜索学习
在部分内容中,我们假定你了解海豹变量机制和正则表达式。如果你对正则表达式还很陌生,可以参考以下材料,或在互联网自行搜索学习

- [正则表达式 - 菜鸟教程](https://www.runoob.com/regexp/regexp-tutorial.html)
- [Regex 101](https://regex101.com/),提供正则表达式在线解析和验证,并且为表达式中不同元素给出解释

海豹核心跟随 Go 语言,采用 [RE2](https://github.com/google/re2/wiki/Syntax) 规范。该规范与其他规范在个别扩展语法上存在细微差别,请注意辨析。

在使用 Regex 101 网站时,请注意在左侧的「FLAVOR」栏选中「Golang」,以确保正则表达式的表现一致。

:::

Expand Down Expand Up @@ -59,9 +64,9 @@ func strCompare(a string, b string) float64 {

### 文本匹配:正则匹配

使用正则匹配时,直接在要匹配的文本一栏中写入正则表达式即可。
使用正则匹配时,直接在要匹配的文本一栏中写入正则表达式即可。当正则表达式获得匹配时,该条件得到满足。

正则匹配可以将回复中的一部分存入变量中以备调用:
对于正则表达式中的捕获组,海豹遵循命令行脚本的通行做法,将其按顺序存储于多个变量 `$t1` `$t2` 等。

```text
正则匹配:^购买(.+)
Expand All @@ -77,9 +82,9 @@ func strCompare(a string, b string) float64 {

:::

正则匹配会将满足匹配的整条消息存入 `$t0`,而正则中的分组会按顺序存入 `$t1` `$t2` 等中。在如上例子中,就是将 `购买` 后用括号括起来的部分存入了 `$t1`,从而可以进行调用
可以发现第 1 捕获组命中的字符串 `猫粮`,被存储于变量 `$t1` 中。

如额外存在组名,如 `(?P<A>cc)`将会额外存入 `$tA`
此外,对于正则表达式匹配的完整内容将被存储于变量 `$t0`。如果捕获组存在命名,如命名为 `A` 的捕获组 `(?P<A>cc)`命中的字符串也将额外存入变量 `$tA`

::: warning 注意:不要使用某些前缀!

Expand All @@ -89,7 +94,7 @@ func strCompare(a string, b string) float64 {

::: tip 提示:正则中匹配 CQ 码

海豹支持用正则匹配 CQ 码,但是如果你这么做了,请在 `[` `]` 前面进行转义。
海豹支持用正则匹配 CQ 码。但是,由于 `[` `]` 符号在正则表达式中含有特殊含义,如果你这么做了,请对它们进行转义。

示例:`^\[CQ:xxx,xx=xxx\]`

Expand Down Expand Up @@ -128,7 +133,7 @@ func strCompare(a string, b string) float64 {

如果想要输出字符串,则应该用 ``` ` ``` / `"` / `'` 括上。

- 例:形如 `{% \$t1="114514" %}` 的式子会输出 `114514`
- 例:形如 `{% \$t1="114514" %}` 的式子会输出 `114514`

::: tip 提示:结果中调用变量

Expand All @@ -145,19 +150,19 @@ func strCompare(a string, b string) float64 {
#### 示例:使用 `if`

```text
{%
$t测试=1;
if $t测试==1 {$t输出="赞美木落"};
if $t测试==2 {$t输出="快点更新"};
if $t测试!=2&&$t测试!=1 {$t输出="群主女装"}
{%
$t测试=1;
if $t测试==1 {$t输出="赞美木落"};
if $t测试==2 {$t输出="快点更新"};
if $t测试!=2&&$t测试!=1 {$t输出="群主女装"}
%}
{$t输出}
{$t输出}
```

首先给 `$t测试`赋值为 1,然后进入判断:
首先给 `$t测试`赋值为 1,然后进入判断:

1. 如果 `$t测试` 等于 1,则变量 `$t输出` 等于 `"赞美木落"`
2. 如果 `$t测试` 等于 2,则变量 `$t输出` 等于 `"快点更新"`
1. 如果 `$t测试` 等于 1,则变量 `$t输出` 等于 `"赞美木落"`
2. 如果 `$t测试` 等于 2,则变量 `$t输出` 等于 `"快点更新"`
3. 如果 `$t测试` 既不等于 2 也不等于 1,则变量 `$t输出` 等于 `"群主女装"`;

最后,输出变量 `$t输出`
Expand All @@ -167,27 +172,27 @@ if $t测试!=2&&$t测试!=1 {$t输出="群主女装"}
目前海豹语并不支持 `else if``if``else` 是一对一匹配的。所以当形如:

```text
if xxx {xxx};
if xxx {xxx}
else {xxx}
if xxx {xxx};
if xxx {xxx}
else {xxx}
```

的语句出现时,并不是 `if elseif elseif else` 的关系!即使满足了第一个 `if`,其结果也是执行 `else` 中的内容!
的语句出现时,并不是 `if elseif elseif else` 的关系!即使满足了第一个 `if`,其结果也是执行 `else` 中的内容!

:::

#### 示例:变量运算

```text
{%
$t0=1;
$tRand=d6;
if $t0==1 {$t0=$t0+$tRand}
%}
{%
$t0=1;
$tRand=d6;
if $t0==1 {$t0=$t0+$tRand}
%}
{$t0}
```

在这个例子里,我们先给 `$t0` 赋值为 1,然后判断 `$t0` 是否等于 1,若通过则 `$t0` 的值增加 1d6,最后输出结果。
在这个例子里,我们先给 `$t0` 赋值为 1,然后判断 `$t0` 是否等于 1,若通过则 `$t0` 的值增加 1d6,最后输出结果。

## 更多示例片段

Expand All @@ -196,7 +201,7 @@ if $t0==1 {$t0=$t0+$tRand}
以养猫功能中猫好感度为例:

```text
{%
{%
$mCatFavor<=100 ? `#{DRAW-第一档猫好感}`,
$mCatFavor<=250 ? `#{DRAW-第二档猫好感}` ,
$mCatFavor<=600 ? `#{DRAW-第三档猫好感}` ,
Expand All @@ -213,7 +218,7 @@ $mCatFavor<=2500 ? `#{DRAW-第五档猫好感}` ,
除了形如

```text
{%
{%
判断1 ? `#{DRAW-牌组1}`,
判断2 ? `#{DRAW-牌组2}`,
判断3 ? `#{DRAW-牌组3}`,
Expand All @@ -224,7 +229,7 @@ $mCatFavor<=2500 ? `#{DRAW-第五档猫好感}` ,
的写法外,还可以使用:

```text
{%
{%
if 判断1 {
$tRand=d6;
$t输出=$tRand==1?`内容1`,
Expand Down Expand Up @@ -294,7 +299,7 @@ if 判断3 {$tRand=d10;$t输出=$tRand==1?`内容1`,……};
回复:

```text
{%
{%
if $m变量!=$tDate {
$t输出=`你需要的回复文本`;
$m变量=$tDate//对其赋值,作为标记
Expand Down Expand Up @@ -322,7 +327,7 @@ if 1 {
$tDicePlay=$tRand==1?"石头",
$tRand==2?"剪刀",
1?"布"
}
}
%}
{% //新开一行赋值
Expand Down

0 comments on commit 62ee98d

Please sign in to comment.