我想通过使用正则表达式只选择一些没有任何“id”属性的特定标签(tagA | tagB)细节。
<span class="online"><tagA xmlns="http://www.xyz.com/xml/ja/dtd">A1</tagA><tagB id="tg1" xmlns="http://www.xyz.com/xml/ja/dtd">B1</tagB></span>
<span class="online"><tagA id="tg2" xmlns="http://www.xyz.com/xml/ja/dtd">A2</tagA><tagB xmlns="http://www.xyz.com/xml/ja/dtd">B2</tagB></span>
<tagA id="tg3" xmlns="http://www.xyz.com/xml/ja/dtd">A3</tagA>
<tagB id="tg4" xmlns="http://www.xyz.com/xml/ja/dtd">B3</tagB>
<tagC id="tg5" xmlns="http://www.xyz.com/xml/ja/dtd">C1/tagC>
<tagA xmlns="http://www.xyz.com/xml/ja/dtd">A4</tagA>
<tagB xmlns="http://www.xyz.com/xml/ja/dtd">B4</tagB>
<tagC xmlns="http://www.xyz.com/xml/ja/dtd">C2</tagC>
<tagA>A5</tagA>
<tagB>B5</tagB>
<tagC>C3</tagC>
<span class="online"><i><tagA xmlns="http://www.xyz.com/xml/ja/dtd">A6</tagA></i><b><tagB id="tg6" xmlns="http://www.xyz.com/xml/ja/dtd">B6</tagB></b></span>
<span class="online"><i><tagA id="tg7" xmlns="http://www.xyz.com/xml/ja/dtd">A7</tagA></i><b><tagB xmlns="http://www.xyz.com/xml/ja/dtd">B7</tagB></b></span>
因此我应该只得到以下细节:
<tagA xmlns="http://www.xyz.com/xml/ja/dtd">A1</tagA>
<tagB xmlns="http://www.xyz.com/xml/ja/dtd">B2</tagB>
<tagA xmlns="http://www.xyz.com/xml/ja/dtd">A4</tagA>
<tagB xmlns="http://www.xyz.com/xml/ja/dtd">B4</tagB>
<tagA>A5</tagA>
<tagB>B5</tagB>
<tagA xmlns="http://www.xyz.com/xml/ja/dtd">A6</tagA>
<tagB xmlns="http://www.xyz.com/xml/ja/dtd">B7</tagB>
答案 0 :(得分:2)
即使它是嵌套的
,这个正则表达式也会匹配<(?!.*?\sid=)(.*?)(\s+.*?)?>.*?</\1>
.*?
懒惰地匹配0到多个字符
(?!.*?id=)
是一个否定的预测,它会检查是否存在id属性以及它是否会进一步匹配
在()
group
内匹配的所有内容
\1
指的是first
匹配的群组..
您可以尝试here
答案 1 :(得分:1)
使用正则表达式
<(\S+)(?![^<>]*\bid=).*?<\/\1>
答案 2 :(得分:0)
我将如何做到这一点:
/<(tag[A-Z]+)(?:\s+(?!id=)\w+="[^"]+")*>\w+<\/\1>/i
打破它:
<(tag[A-Z]+)
匹配开始标记并在第1组中捕获其名称
(?:\s+(?!id=)\w+="[^"]+")*
在检查属性的名称不是id
>\w+</\1>
完成开始标记,然后使用内容和结束标记
您可能需要调整部分内容,尤其是\w+
序列。由于缺乏对数据的熟悉程度,我将其作为占位符进行了调整。