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

发布于 2021-11-12 00:53:08 字数 270 浏览 797 评论 10

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

睫毛上残留的泪 2021-11-16 16:30:38

谢谢回答,请问是从哪里看出来ITEM中不能包含}的?

执手闯天涯 2021-11-16 16:29:58
${([^}]*)} 

匹配

${ITEM}

样的字串

    ITEM可以为空

    ITEM中不能包含}

    ()为了后续引用匹配到的字串

眉黛浅 2021-11-16 16:26:48

停杯投箸不能食,拔剑四顾心茫然.庆余年抄袭李白的.

小情绪 2021-11-16 16:23:53

!!明白了,谢谢大家。

甜柠檬 2021-11-16 16:07:04

^在[]里面和[]外面的意思不同,要区分.在[]里面表示排除,在[]外面表示开头

回忆凄美了谁 2021-11-16 08:34:44

^在[]里面和[]外面的意思不同,要区分.在[]里面表示排除,在[]外面表示开头

反目相谮 2021-11-15 23:16:30

^}的意思是该字符不是}

臻嫒无言 2021-11-15 17:00:09

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

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

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

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

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

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

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

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

柳若烟 2021-11-15 05:56:16

明白了,谢谢。

苍暮颜 2021-11-12 14:19:11

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

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

${    ([^}]*)    } 

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

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

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

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文