我想要一个regex来找出特定的html标记细节。
我试过叫2 regex:
<\s*tag[^>]*>(.*?)<\s*/\s*tag>
<tag[^<>]*>.+?<\/tag>贝娄是用于第一次正则表达式的2测试用例:
在第一个示例中,我得到了正确的结果,但是在示例2中,我得到了错误的结果。在这两种情况下,输入几乎是相同的。
第一种情况:均为单独字符串,第二种情况为:作为单字符串。
===================================
Example 1 Input
===================================
<tagX>AAA</tagX>
<tag>GGG</tag>
<tag id="tag896">HHH</tag>
<tagY>III</tagY>
<tag id="tag017">JJJ</tag>
<tag>KKK</tag>
===================================
Output 1 // Correct
===================================
<tag>GGG</tag>
GGG
<tag id="tag896">HHH</tag>
HHH
<tag id="tag017">JJJ</tag>
JJJ
<tag>KKK</tag>
KKK
===================================
Example 2 Input (as a single string)
===================================
<tagX>AAA</tagX><tag>GGG</tag><tag id="tag896">HHH</tag><tagY>III</tagY><tag id="tag017">JJJ</tag><tag>KKK</tag>
===================================
Output 2 // Wrong
===================================
<tagX>AAA</tagX><tag>GGG</tag>
AAA</tagX><tag>GGG
<tag id="tag896">HHH</tag>
HHH
<tagY>III</tagY><tag id="tag017">JJJ</tag>
III</tagY><tag id="tag017">JJJ
<tag>KKK</tag>
KKK在这里,我想要(标记)的详细信息,但在第二种情况下,它获取(tag) + (tagX) + (tagY)详细信息。
我的输入类似于第二输入.
它的紧急..。我能找到解决办法吗。
谢谢..。
发布于 2013-08-07 12:02:04
在您编写的正则表达式中,您的问题是,如果“”应该在同一行上关闭,则允许<tagX> (例如)作为开始标记。
在本例中使用正则表达式的问题是,如果XML是:
<tag></tag>
<tagX></tagX>
<tag></tag>如果所有的标签都是内联的,你可以得到所有的东西,所以要非常小心。
我会使用类似的东西(上面的例子是这样的):
<\s*tag((\s+[^<>]+\s*>)|(\s*>))[^<>]*<\s*\/tag\s*>在这里,我允许所有有效的空白空间,但我不允许嵌套标记,所以上面的示例将有效。此外,如果允许嵌套标记,则不允许REGEX工作。请看下面的示例:
<tag> <tagX> <tag> </tag> </tagX> </tag>不过,在本例中,您将获得<tag> <tagX> <tag> </tag>作为一个有效的答案。
发布于 2013-08-07 12:38:28
我试过下面的规则,它的工作很好.
<tag( [^<>]+)?>(.+?)<\/tag>发布于 2013-08-07 12:21:22
如果您正在使用.NET (出于某种原因,您确信您的XML不需要使用Html敏捷包),您可以尝试如下:
<tag(?:>|(?: .*?>))(.*?)</tag>https://stackoverflow.com/questions/18102251
复制相似问题