I have a text with a structure like this:
<section id="TP-1">
<h3>1. One</h3>
<p>Et harum quidem rerum facilis est et expedita distinctio.</p>
</section>
<hr />
<section id="TP-2">
<h3>2. Two</h3>
<p>Et harum quidem rerum facilis est et expedita distinctio.</p>
<hr />
<p ></p>
</section>
I need to add an id
attribute to the p
tags belonging to the footnote
class, and its value should be based on the id
of the parent section
tag. This is what I wrote:
<section id="TP-(\d ?)">((.|\n) ?)(?!</section>)<p
The problem is that the match is not the desired one and includes </section>
while I used negative lookahead. Here is the match:
<section id="TP-1">
<h3>1. One</h3>
<p>Et harum quidem rerum facilis est et expedita distinctio.</p>
</section>
<hr />
<section id="TP-2">
<h3>2. Two</h3>
<p>Et harum quidem rerum facilis est et expedita distinctio.</p>
<hr />
<p
While I expected this:
<section id="TP-2">
<h3>2. Two</h3>
<p>Et harum quidem rerum facilis est et expedita distinctio.</p>
<hr />
<p
Here you can check the regex: https://regex101.com/r/qGIUYd/1
CodePudding user response:
Your negative lookahead occurs after (.|\n) ?
(which btw you should replace with .
and s
flag) that will match everything it can until the next <p
.
Put the negative lookahead inside the quantified expression:
/ <section id="TP-(\d ?)">(.(?!<\/section>)) ?<p /gms