首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与CPE 2.3匹配的Regex

与CPE 2.3匹配的Regex
EN

Stack Overflow用户
提问于 2016-05-18 12:00:10
回答 2查看 2K关注 0票数 6

我试图用正则表达式验证CPE 2.3名称。CPE 2.3名称的基本结构如下:

代码语言:javascript
复制
cpe:2.3:part:vendor:product:version:update:edition:lang:sw_edition:target_sw:target_hw:other

零件、供应商、产品、版本等。可以由一系列字母数字字符、数字和标准中定义的一些特殊字符组成。

我目前面临的问题是允许在这些字段(供应商、产品等)中使用转义冒号(\:)。因此,我不能使用量词来检查CPE中是否存在正确的字段数量。

示例

代码语言:javascript
复制
Regex = cpe\:2\.3\:[aho](\:[a-zA-Z0-9\!\"\#\$\%\&\'\(\)\*\+\,\-\_\.\/\;\<\=\>\?\@\[\\\]\\^\`\{\|\}\~]+)\g<1>{9}

用这个regex验证以下CPE名称很好:

代码语言:javascript
复制
cpe:2.3:a:1024cms:1024_cms:1.4.1:*:*:*:*:*:*:*

但是,使用相同的正则表达式验证下面的CPE名称会失败,因为由于CPE的产品字段中的\:序列导致量词错误。

代码语言:javascript
复制
cpe:2.3:a:alawar:motor_town\\:_machine_soul_free:1.1:*:*:*:*:android:*:*

匹配失败的另一个示例如下:

代码语言:javascript
复制
cpe:2.3:a:lemonldap-ng:lemonldap\\:\\::0.6:*:*:*:*:*:*:*

在这里,由于\:序列,匹配仍然失败,但是由于另一个原因,因为现在第一个捕获组的+量词不满足。

如何在不使用贪婪量词的情况下正确匹配这样的CPE?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-18 14:09:00

这个regex应该能做到这一点:

代码语言:javascript
复制
cpe:2\.3:[aho](?::(?:[a-zA-Z0-9!"#$%&'()*+,\\\-_.\/;<=>?@\[\]^`{|}~]|\\:)+){10}$

请参阅现场演示

这部分特别有趣:

代码语言:javascript
复制
(?::(?:[a-zA-Z0-9!"#$%&'()*+,\\\-_.\/;<=>?@\[\]^`{|}~]|\\:)+)

因为它允许输入几乎是值中的所有内容或\:

票数 3
EN

Stack Overflow用户

发布于 2018-03-31 13:54:00

官方CPE模式指定此regex:

代码语言:javascript
复制
cpe:2\.3:[aho\*\-](:(((\?*|\*?)([a-zA-Z0-9\-\._]|(\\[\\\*\?!"#$$%&'\(\)\+,/:;<=>@\[\]\^`\{\|}~]))+(\?*|\*?))|[\*\-])){5}(:(([a-zA-Z]{2,3}(-([a-zA-Z]{2}|[0-9]{3}))?)|[\*\-]))(:(((\?*|\*?)([a-zA-Z0-9\-\._]|(\\[\\\*\?!"#$$%&'\(\)\+,/:;<=>@\[\]\^`\{\|}~]))+(\?*|\*?))|[\*\-])){4}

参考资料:2.3.xsd

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

https://stackoverflow.com/questions/37298968

复制
相关文章

相似问题

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