【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”
\$\{([^\}]*)\}这个是不是可以分解为 \$ \{ ([^\}]*) \}
就是说在${}里边可以包含任意多个 [^\}]
那么这个 ^\} 的意思是不是以 } 开头?
但是为什么这个可以匹配
${tid} 和 ${cb:digest}
【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”
\$\{([^\}]*)\}那么这个 ^\} 的意思是不是以 } 开头?
但是为什么这个可以匹配
${tid} 和 ${cb:digest}
这个正则表达式 的目的就是 匹配 形如 ${xxx} 的字符串.
将这个正则拆为3部分,便于理解
\$\{ ([^\}]*) \}
第一部分: \$\{ 很简单就是匹配 "${" 这个字符串
第三部分:\} 也很简单 匹配 "}" 这个字符串
第二部分:([^\}]*) 就是为了抓住 "${xxx}" 中的大括号中的内容. 这里面的内容有一个必须条件,就是不能含有 "}" ,如果含有, 则正则引擎就会回溯至这个 "}" ,把它当成第三部分的目标. 前面几楼已经说了 '^' 出现在正则表达式开头,表示行首锚,匹配字符串开头(类似的还有行末锚$), 出现在 "[ ]" 内部的开头时表示 '非'.........................
正则是非常灵活有意思的,要达到上面正则的目的还可以换个形式 : \$\{(.*?)\}
额 闲来无事在这戳戳键盘..
首先,\ 是转义符,是用来标识特殊字符的(基本上是各种符号; 引用:如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.和\*。当然,要查找\本身,你也得用\\)
\$\{ 表示要包含 "${" 这两个连续字符
() 表示分组,括弧内匹配到的所有字符被组合起来作为一个变量"$(n)",在匹配结果和替换时用到。
[^\}]* 表示匹配不是 "}" 的连续字符 0或者多个。后面的 \} 即表示要跟着一个 "}",当匹配到 "}" 时,这个正则表达式匹配完成。
所以 \$\{([^\}]*)\} 的意思是匹配 ${任意,但不能包含 "}" 的字符}
${tid} 和 ${cb:digest} 等就符合这个规则。
事实上,那个 * 应该替换成 +,不然这个表达式能匹配到 "${}" 这个东东,显然是木有意义滴
正确的应是:\$\{([^\}]+)\}
引用来自“四顾剑”的答案
${ITEM}
样的字串
ITEM可以为空
ITEM中不能包含}
()为了后续引用匹配到的字串