我有一个带有html内容的字符串,其中的链接位于错误的位置,我需要将其放在正确的位置。让我解释一下这种模式:
所有链接后跟一个<sup>
标记或*
。我需要在a
或*
之后关闭</sub>
代码。例如:
<a href="#" class="ddb1"><sup id="v3534" class="ddb17">34</sup> No harás impura la tierra en que habitáis, porque yo habito en medio de ella, pues yo, Yahvé, tengo mi morada entre los israelitas.»</a>
应该是这样的:
<a href="#" class="ddb1"><sup id="v3534" class="ddb17">34</sup></a> No harás impura la tierra en que habitáis, porque yo habito en medio de ella, pues yo, Yahvé, tengo mi morada entre los israelitas.»
和
La herencia de la mujer casada<a href="notas04nm.xhtml#nnm170ref" class="ddb1">*.</a>
应该是:
La herencia de la mujer casada<a href="notas04nm.xhtml#nnm170ref" class="ddb1">*</a>.
问题是,字符串中的*
和sup
标记可能没有内部链接,因此,我无法删除</a>
并替换{ {1}} *
和*</a>
</sup>
。所以,我认为正确的方法是使用Regex,但我对此非常不满。
非常好地表示真实字符串的示例字符串是:
</sup></a>
注意:
该字符串包含拉丁字符,如<sup id="v3530" class="ddb17">30</sup> «En cualquier caso de homicidio, se matará al homicida según la declaración de los testigos; pero un solo testigo no bastará para condenar a muerte a un hombre*. <sup id="v3531" class="ddb17">31</sup> No aceptaréis rescate por la vida de un homicida reo de muerte, pues debe morir. <sup id="v3532" class="ddb17">32</sup> Tampoco aceptaréis rescate por el que se ha refugiado en la ciudad de asilo y quiere volver a habitar en su tierra antes que muera el Sumo Sacerdote. <a href="#" class="ddb1"><sup id="v3533" class="ddb17">33</sup> No profanaréis la tierra en que estáis, porque aquella sangre profana la tierra, y la tierra no queda expiada de la sangre derramada más que con la sangre del que la derramó. </a><a href="#" class="ddb1"><sup id="v3534" class="ddb17">34</sup> No harás impura la tierra en que habitáis, porque yo habito en medio de ella, pues yo, Yahvé, tengo mi morada entre los israelitas.»</a> La herencia de la mujer casada<a href="notas04nm.xhtml#nnm170ref" class="ddb1">*.</a>
。
修改
我有这段代码适用于前2个示例但不适用于第3个示例(那个代码是真实字符串的示例):
áéíóúñ
答案 0 :(得分:1)
你可以(不是说你应该)使用以下表达式:
<a[^>]*>(?:\*|<sup[^>]*>.*?</sup>)\K(.*?)</a>
这需要替换为
</a>$1
请参阅a demo on regex101.com(并注意修饰符!)。
<小时/> 细分,这写着:
<a[^>]*> # likely an opening anchor tag
(?:\*|<sup[^>]*>.*?</sup>) # * or <sup...>...</sup>
\K # forget what's been matched thus far
# (but remember the position)
(.*?) # match anything lazily...
</a> # ... up to </a>
但是,请考虑使用解析器和DOM
函数,因为这有点hacky且容易出错嵌套标记和属性(即data-tags
)。