首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个python regex是什么意思"([\w\/%]*)“

这个python regex是什么意思"([\w\/%]*)“
EN

Stack Overflow用户
提问于 2014-10-20 13:54:55
回答 1查看 122关注 0票数 0

我正在阅读Shinken /misc/perdata.py中的shinken源代码,我终于找到了一个我无法理解的regex。就像这样:

代码语言:javascript
复制
metric_pattern = re.compile('^([^=]+)=([\d\.\-\+eE]+)([\w\/%]*);?([\d\.\-\+eE:~@]+)?;?([\d\.\-\+eE:~@]+)?;?([\d\.\-\+eE]+)?;?([\d\.\-\+eE]+)?;?\s*')

令我困惑的是,\/([\w\/%]*)中的含义是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-20 13:58:13

您有理由感到困惑,因为这个regex一定是某个不熟悉Python正则表达式的人编写的。

在某些语言(例如JavaScript)中,正则表达式用斜杠分隔。这意味着,如果你需要在你的正则表达式中的一个实际的斜线,你必须逃避它。因为Python不使用斜杠,所以没有必要转义斜杠(但它也不会导致错误)。

更令人担忧的是,作者没有使用原始字符串。在许多情况下,这并不重要(因为Python将"\d"作为"\\d"来正确地转换为regex \d,但在其他情况下,它会导致问题。一个例子是"\b",它的意思是“backspace字符”,而不是像regex \b那样的“word boundary anchor”。

此外,作者还逃脱了许多根本不需要转义的角色。整个regex可以重写为

代码语言:javascript
复制
metric_pattern = re.compile(r'^([^=]+)=([\d.+eE-]+)([\w/%]*);?([\d.+eE:~@-]+)?;?([\d.+eE:~@-]+)?;?([\d.+eE-]+)?;?([\d.+eE-]+)?;?\s*')

即使如此,我还是感到惊讶。在我看来很混乱,绝对不是万无一失的。例如,catastrophic backtracking似乎有很大的潜力,这意味着用户可以用恶意输入冻结您的服务器。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26467403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档