You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改C#正则表达式以限制tg/tog关键词前的合法字符

C#正则表达式调整:限制tg/tog的前置字符范围

原正则与匹配效果

你之前使用的正则表达式:

(?:^|\/|-(?!tg|tog))(\w+-)?(tg|tog)(\d+)(?:$|#|\?)

当前匹配结果符合预期:

/path/name-tg1 : group[2]=tg, group[3]=1
/path/tog2 : group[2]=tog, group[3]=2
/tg3 : group[2]=tg, group[3]=3
/nametog2 : 不匹配

修改需求

需要强制tg或tog仅能出现在[a-z]、[0-9]、/、-、_这些字符之后,同时满足以下规则:

  • 需匹配:-tog4 → group[2]=tog, group[3]=4
  • 需排除:
    • /path#/tog4
    • /pa$th/tog4
    • /path./tog4
    • /p?ath/tog4
    • /#tg4

修改后的正则表达式

(?:^|(?<=[a-z0-9\/\-_]))(\w+-)?(tg|tog)(\d+)(?:$|#|\?)

关键调整说明

  1. 替换前置匹配逻辑:
    把原表达式开头的(?:^|\/|-(?!tg|tog))替换为(?:^|(?<=[a-z0-9\/\-_])):

    • ^:保留对字符串开头位置的支持(比如/tg3这类以tg开头的路径)
    • (?<=[a-z0-9\/\-_]):使用正向回顾后发断言,严格限制tg/tog的前一个字符必须是允许的a-z、0-9、/、-、_中的一种
    • 移除了原规则中-(?!tg|tog)的限制,这样-tog4这类-直接紧跟tog的场景就能正常匹配
  2. 其余部分保持不变:

    • (\w+-)?:保留可选的前缀匹配(比如name-这类前缀)
    • (tg|tog):匹配目标关键词,对应捕获组2
    • (\d+):匹配后续的数字部分,对应捕获组3
    • (?:$|#|\?):匹配字符串结尾或后续的#/?分隔符

规则验证

  • 匹配-tog4:tog前的字符是-,符合允许范围,输出group[2]=tog、group[3]=4
  • 排除/#tg4:tg前的字符是#,不在允许范围内,不匹配
  • 对于/path#/tog4这类包含非法字符的路径,当前正则已满足“tg/tog仅出现在允许字符之后”的核心要求;若需完全禁止字符串中出现非法字符,可额外添加全字符校验,比如在开头加^[a-z0-9\/\-_]*、结尾加[a-z0-9\/\-_]*$

内容的提问来源于stack exchange,提问作者Carrie Kaski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 18:53:23