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

Knox身份断言正则:将[ABC123]转为无括号小写的实现问题

解决Knox正则身份断言无法将提取内容转小写的问题

核心原因

Knox的Regex身份断言组件不支持Java正则替换中的\L大小写转换标记,它仅支持{n}格式的分组反向引用,所以直接在替换字符串里用\L{1}是无效的。

可行解决方案

1. 链式配置Regex+LowerCase身份断言

利用Knox支持的多身份断言链式处理,先提取目标内容,再统一转小写:

<!-- 第一步:提取[]中的内容 -->
<provider>
  <role>identity-assertion</role>
  <name>Regex</name>
  <enabled>true</enabled>
  <param>
    <name>pattern</name>
    <value>[(.*?)]</value>
  </param>
  <param>
    <name>replacement</name>
    <value>{1}</value>
  </param>
</provider>
<!-- 第二步:将提取后的内容转小写 -->
<provider>
  <role>identity-assertion</role>
  <name>LowerCase</name>
  <enabled>true</enabled>
</provider>

这个方案无需自定义代码,完全依赖Knox原生组件,适合简单场景。

2. 自定义Groovy脚本身份断言

如果需要更灵活的处理逻辑(比如同时处理多种格式的身份),可以用Groovy脚本实现提取+小写转换:

// 处理输入身份,提取[]内的内容并转小写
def input = principal
def matchResult = input =~ /\[(.*?)\]/
if (matchResult.find()) {
    return matchResult.group(1).toLowerCase()
}
// 匹配失败时返回原身份
return input

将脚本保存为lowercase-extract.groovy,然后在Knox配置中引用:

<provider>
  <role>identity-assertion</role>
  <name>Groovy</name>
  <enabled>true</enabled>
  <param>
    <name>script</name>
    <value>lowercase-extract.groovy</value>
  </param>
</provider>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:54:55