首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >复杂条件正则表达式

复杂条件正则表达式
EN

Stack Overflow用户
提问于 2014-08-05 18:32:02
回答 2查看 71关注 0票数 2

我对正则表达式有意见,

以下是我的数据示例(http://regex101.com/r/rE3hO9/1):

代码语言:javascript
复制
<M ID="9459" C="VSPH" S="I" T="2014-08-04T21:52:33. 0+02:00"><PS><P T="0">[P2000_DS13] vmserv01/vmserv01.vmdk</P><P T="0">29.22 GB</P><P T="0">30.00 GB</P></PS></M>
<M ID="9519" C="VSPH" S="I" T="2014-08-04T21:52:33. 0+02:00"><PS><P T="0">[P2000_DS15] vmserv02/vmserv02.vmdk</P><P T="0">15.20 GB</P><P T="0">15.20 GB</P><P T="0">100.00 GB</P></PS></M>

我需要隔离服务器的名称,例如:

代码语言:javascript
复制
<P T="0">[P2000_DS13] vmserv01/vmserv01.vmdk</P>

以及它的不同值(可以是0、1、2或3)如下所示:

代码语言:javascript
复制
   <P T="0">29.22 GB</P><P T="0">30.00 GB</P>
   <P T="0">30.00 GB</P>

到目前为止,我做到了以下几点:

代码语言:javascript
复制
<M ID="[0-9]+" C="VSPH" S="I" T="(.*)"><PS><P T="(.*)">\[(.*)] (.*?)\/(.*)<\/P><P T="(.*)">(.*) GB<\/P><P T="(.*)">(.*) GB<\/P><P T="(.*)">(.*) GB<\/P><\/PS><\/M>

但当我有3个值时,它工作得很好,但当我只有2或1个值时,它就不匹配了。

你能帮个忙吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2014-08-09 08:05:43

为此,您需要2个正则表达式。

首先,分隔<M>标记:

代码语言:javascript
复制
<M ID="[0-9]+" C="VSPH" S="I" T="[^"]+"><PS>(<P T="0">[^<]+</P>)+</PS></M>

然后,对于每个match1,让这个正则表达式逐个匹配其中的每个<P>标记:

代码语言:javascript
复制
<P T="0">[^<]+</P>
票数 1
EN

Stack Overflow用户

发布于 2014-08-09 07:54:04

假设您想使用正则表达式而不是解析器,

代码语言:javascript
复制
(?:<P(?!S)[^>]*>)([^<(GB$)]*)(?:<\/P>)

这将完全同构服务器名称(的值,但不是标记)。如果你想要这些标签,这是可行的:

代码语言:javascript
复制
(<P(?!S)[^>]*>)([^<(GB$)]*)(<\/P>)

这些假设不需要的条目以"GB“结尾。

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

https://stackoverflow.com/questions/25136635

复制
相关文章

相似问题

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