字符串上的自动标记作用于 *string*

此问题是在我对短字符串(例如“art”)设置自动标签规范时发现的。结果导致自动标签将“artificial”等词标记为相关主题。

附注:自动标签规范页面上的“测试”功能运行正常(针对“art”的自动标签测试中,“artificial”不会生成标签)。

该问题可能尚未被注意到,因为对短词进行自动标签的情况或许并不常见。

4 个赞

我想 @codinghorror 也注意到了这一点。这已在我们的待办清单中,我们会尽快处理。

4 个赞

我已修复此 bug 并进行了替换,链接和标签中的监控词现在将作用于整个单词。

当启用 watched_words_regular_expressions 时存在例外情况。

4 个赞

感谢您的回复,Bianca。

我想我默认启用了 watched_word_regular_expression,却没意识到这会破坏“针对完整单词操作”的功能。针对完整单词操作与正则表达式不兼容是必要的吗?

也就是说,我是否仍应将其视为一个 bug,还是由另一项功能导致的必要限制?

目前,我仍将其视为一个 bug。我没有理由认为,当指定了正则表达式时,非正则表达式的完整单词解析会与正则表达式解析不兼容。

嘿,Norman,

如果你在部分关注词中使用了正则表达式,那么它将适用于所有词。因此,如果启用了正则表达式,并且你为 art 配置了自动标签,那么 artificial 也会被标记。如果只想匹配单词 art,请使用单词边界元字符 \\b。对于 art 来说,写法应为 \\bart\\b

3 个赞

我们需要确保 UI 在启用该选项时予以提示,因为此时该字段的含义会发生显著变化。

这类似于输入密码时显示“大写锁定已开启”等提示。

3 个赞

非常感谢大家。如果我对正则表达式相当浅显的理解有所欠缺,导致我误解了它们在“监控词”中的工作原理,我深表歉意。但……有几点需要说明:

  • 我原本以为正则表达式的上下文会被视为“词边界内的字符串”。还有什么更合理的解释呢?肯定不是整个主题文档吧?在这种情况下,若要标记“artificial”,我就需要指定 art*(或 art.* 之类的写法,正如本主题标题中提到的那样)。

  • Joshua:谢谢你关于词边界元字符的建议。我刚刚试过了,但不起作用。无论是在“测试”功能中还是在实际应用中都不行。所以……目前看来似乎没有变通方法(或者说没有“正确的方式”来实现期望的行为)。

  • “测试”功能非常好。它的表现完全符合我的直觉预期。art 仅在出现单词“art”时触发(不会在“artificial”上触发),而 art* 则如预期那样在“artificial”上触发。此外,art* life 既能匹配“art life”,也能匹配“artificial life”。我还曾以为,如果我只输入单个单词,“测试”功能可能不会使用正则表达式解析,但事实并非如此……foo* art 会匹配“foobar art”,但不会匹配“foobar artificial”。所以……编写“测试”功能的人思考方式和我一样(我想是这样)。

总之:

  • Jeff 建议添加一条提醒,说明已启用 watched_words_regular_expressions,这很好。
  • “测试”功能的行为应与实际行为保持一致。
    • 顺便一提,我更希望实际行为能与当前“测试”功能的行为保持一致。
  • 如果用户需要比当前“测试”功能所暗示的更多的正则表达式知识,最好能在某处提供一些示例。
  • 如果存在变通方法或“正确的方式”(例如“使用 \\bart\\b 来实现期望的行为”),我很乐意采用。

再次感谢大家对这个相对次要的问题的关注,毕竟这是一个非常出色的平台!

2 个赞

能否确保将此任务分配给 @zogstrip

4 个赞

在此 PR 中,当启用“受监控词汇”的正则表达式站点设置时,我添加了一条通知:

以下是正则表达式禁用和启用后的效果(请注意通知和不同的输入占位符):

4 个赞

但是 Bianca,
我尝试使用 \bart\b 时,它并没有在“art”或“artificial”上触发(本来就不应该触发)。

这次尝试是为了自动标签功能。

请问,为什么我们不能直接使用现有的 Test 函数来解析主题(以实现自动标签)呢?

你好,Norman,

如果您的站点设置启用了“观察词语正则表达式”,则必须使用 \b,其中 \b 表示单词边界。如果该站点设置已禁用,则无需手动添加,因为单词边界会自动包含。

我刚刚测试过,这对我来说运行正常,包括测试弹窗:

我已经实现了该功能,在最新版本中应该可以正常工作。

3 个赞

你好,Bianca,

非常感谢你对此事的关注。

  1. 我之前对启用“受监控词语的正则表达式”感到困惑。我以为如果在自动触发规范中使用 * 通配符,它会自动生效。现在我明白了并非如此,因此我的 \bart\b 尝试失败也就不足为奇了。
  2. 我会查看“最新版本”以获取你实现的测试功能。对我来说,“测试”一直有效,对你来说也是如此。

再次感谢!

2 个赞