如何使用正则表达式中的特定单词获取ID?

时间:2015-06-05 09:23:28

标签: php regex

我的字符串:

<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]的位置我需要使用aclass的属性替换为href,href是相关{{1}的div的ID居住。 label*的类是a

的类
  1. 正如我上面提到的div元素类和ID是它们的相对a类名和ID。但是如果存在div,则需要忽略它不应该采用他们的类名和ID。
  2. 预期输出:

    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和类名。

2 个答案:

答案 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解析器。这个算法非常简单,因为你可以在一个节点及其子节点上运行。

所以你的问题的理论答案是:你不能。虽然它可能会以一些糟糕的方式解决许多正则表达式扩展。