我的字符串:
<div class="sect1" id="s9781473910270.i101">
<div class="sect2" id="s9781473910270.i102">
<h1 class="title">1.2 Summations and Products[label*summation]</h1>
<p>text</p>
</div>
</div>
<div class="sect1" id="s9781473910270.i103">
<p>sometext [ref*summation]</p>
</div>
<div class="figure" id="s9781473910270.i220">
<div class="metadata" id="s9781473910270.i221">
</div>
<p>fig1.2 [label*somefigure]</p>
<p>sometext [ref*somefigure]</p>
</div>
目标: 1.在label*string
上方的字符串中,ref*string
是交叉引用。在[ref*string]
的位置我需要使用a
和class
的属性替换为href
,href是相关{{1}的div
的ID居住。 label*
的类是a
div
元素类和ID是它们的相对a
类名和ID。但是如果存在div
,则需要忽略它不应该采用他们的类名和ID。预期输出:
div class="metadata"
如何在不使用DOM解析器的情况下以更简单的方式执行此操作?
我的想法是,必须将<div class="sect1" id="s9781473910270.i101">
<div class="sect2" id="s9781473910270.i102">
<h1 class="title">1.2 Summations and Products[label*summation]</h1>
<p>text</p>
</div>
</div>
<div class="sect1" id="s9781473910270.i103">
<p>sometext <a class="section-ref" href="s9781473910270.i102">1.2</a></p>
</div>
<div class="figure" id="s9781473910270.i220">
<div class="metadata" id="s9781473910270.i221">
<p>fig1.2 [label*somefigure]</p>
</div>
<p>sometext <a class="fig-ref" href="s9781473910270.i220">fig 1.2</a></p>
</div>
及其ID存储在一个数组中,并且如果字符串匹配则将循环使用ref字符串以匹配label* string
,然后在该位置替换它们的相关id和类的label* string
,
所以我尝试了this正则表达式来获取ref* string
及其相关的ID和类名。
答案 0 :(得分:2)
此方法包括使用html结构通过DOMXPath检索所需的元素。正则表达式第二次用于从文本节点或属性中提取信息:
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
<provider android:authorities="com.facebook.app.FacebookContentProvider000000000099893"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>
答案 1 :(得分:-1)
这不是正则表达式的任务。正则表达式(通常)用于常规语言。你想要做的是对上下文敏感语言的一些工作(引用之前已经声明过的标识符)。
所以你应该肯定使用DOM解析器。这个算法非常简单,因为你可以在一个节点及其子节点上运行。
所以你的问题的理论答案是:你不能。虽然它可能会以一些糟糕的方式解决许多正则表达式扩展。