请问这个正则表达式都能匹配什么啊?

oldfeel 发布于 2012/09/04 14:11
阅读 419
收藏 1

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

\$\{([^\}]*)\}
这个是不是可以分解为 \$ \{ ([^\}]*) \}
就是说在${}里边可以包含任意多个 [^\}]

那么这个    ^\}    的意思是不是以    }    开头?

但是为什么这个可以匹配
${tid}    和    ${cb:digest}

加载中
0
躲在树后面
躲在树后面

这个正则表达式 的目的就是 匹配 形如 ${xxx} 的字符串.

将这个正则拆为3部分,便于理解

\$\{    ([^\}]*)    \} 

第一部分: \$\{ 很简单就是匹配 "${" 这个字符串 

第三部分:\} 也很简单 匹配 "}" 这个字符串

第二部分:([^\}]*)  就是为了抓住 "${xxx}" 中的大括号中的内容. 这里面的内容有一个必须条件,就是不能含有 "}" ,如果含有, 则正则引擎就会回溯至这个 "}" ,把它当成第三部分的目标. 前面几楼已经说了 '^'   出现在正则表达式开头,表示行首锚,匹配字符串开头(类似的还有行末锚$), 出现在 "[ ]" 内部的开头时表示 '非'.........................

正则是非常灵活有意思的,要达到上面正则的目的还可以换个形式 : \$\{(.*?)\} 

额 闲来无事在这戳戳键盘..

oldfeel
oldfeel
明白了,谢谢。
0
Courage
Courage

首先,\ 是转义符,是用来标识特殊字符的(基本上是各种符号; 引用:如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.\*。当然,要查找\本身,你也得用\\

\$\{ 表示要包含 "${" 这两个连续字符

() 表示分组,括弧内匹配到的所有字符被组合起来作为一个变量"$(n)",在匹配结果和替换时用到。

[^\}]* 表示匹配不是 "}" 的连续字符 0或者多个。后面的 \} 即表示要跟着一个 "}",当匹配到 "}" 时,这个正则表达式匹配完成。

所以 \$\{([^\}]*)\} 的意思是匹配 ${任意,但不能包含 "}" 的字符}

${tid} 和 ${cb:digest} 等就符合这个规则。

事实上,那个 * 应该替换成 +,不然这个表达式能匹配到 "${}" 这个东东,显然是木有意义滴

正确的应是:\$\{([^\}]+)\}

0
leo108
leo108
^\}的意思是该字符不是}
0
四顾剑
四顾剑
^在[]里面和[]外面的意思不同,要区分.在[]里面表示排除,在[]外面表示开头
0
躲在树后面
躲在树后面

引用来自“四顾剑”的答案

^在[]里面和[]外面的意思不同,要区分.在[]里面表示排除,在[]外面表示开头
庆余年?
oldfeel
oldfeel
!!明白了,谢谢大家。
四顾剑
四顾剑
停杯投箸不能食,拔剑四顾心茫然.庆余年抄袭李白的.
0
andmz
andmz
\$\{([^\}]*)\} 
匹配
${ITEM}
样的字串
    ITEM可以为空
    ITEM中不能包含}
    ()为了后续引用匹配到的字串

oldfeel
oldfeel
谢谢回答,请问是从哪里看出来ITEM中不能包含}的?
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部