Regex: Find those files that doesn't contain the same link in 2 different html tags
-
This post is deleted! -
now I see, there is a small problem.
@Terry-R Your regex seems to be good on my example:
(?s)^<link rel.+?https://([^"]+).+?https://(*SKIP)(?!\1)
find only the files whose links are different.@guy038 Your regex, also, it is good on my example:
(?s)<link\h+rel="canonical"\h*\Khref="([^"]+)"((?!<link).)+?<a href="(?!\1).+?"
But, I put that TEXT TEXT between those 2 tags, that means that those links can be find more than twice. For this reason we have specified exactly the lines to be considered. Please see the entire code I have:
<link rel="canonical" href="https://mywebsite.com/en/truth.html" /> <meta name="copyright" content="me, https://mywebsite.com/"/> <link rel="sitemap" type="application/rss+xml" href="rss.xml" /> <link rel="image_src" type="image/jpeg" href="https://mywebsite.com/icon-facebook.jpg" style="display:none"/> <meta itemprop="image" content="https://mywebsite.com/icon-facebook.jpg"/> <meta property="og:image" content="https://mywebsite.com/icon-facebook.jpg"/> <meta property="og:type" content="article" /> <meta property="fb:app_id" content="2156440"/> <meta property="fb:admins" content="16454242"/> <meta property="og:url" content="https://mywebsite.com/en/other-car.html"/> <body> TEXT TEXT <div class="search"> <div align="left"> <a href="https://mywebsite.com/hope.html"><img src="index_files/flag_lang_ro.jpg" title="ro" alt="ro" width="28" height="19" /></a> <a href="https://mywebsite.com/fr/book.html"><img src="index_files/flag_lang_fr.jpg" title="fr" alt="fr" width="28" height="19" /></a> <a href="https://mywebsite.com/en/truth.html"><img src="index_files/flag_lang_en.jpg" title="en" alt="en" width="28" height="19" /></a> <a href="https://mywebsite.com/es/green.html"><img src="index_files/flag_lang_es.jpg" title="es" alt="es" width="28" height="19" /></a> <a href="https://mywebsite.com/pt/yellow.html"><img src="index_files/flag_lang_pt.jpg" title="pt" alt="pt" width="28" height="19" /></a> <a href="https://mywebsite.com/ar/truth.html"><img src="index_files/flag_lang_ae.jpg" width="28" height="19" title="ar" alt="ar" /></a> <a href="https://mywebsite.com/zh/truth.html"><img src="index_files/flag_lang_zh.jpg" width="28" height="19" title="zh" alt="zh" /></a> <a href="https://mywebsite.com/hi/truth.html"><img src="index_files/flag_lang_hi.jpg" width="28" height="19" title="hi" alt="hi" /></a> <a href="https://mywebsite.com/de/truth.html"><img src="index_files/flag_lang_de.jpg" width="28" height="19" title="de" alt="de" /></a> <a href="https://mywebsite.com/ru/truth.html"><img src="index_files/flag_lang_ru.jpg" width="28" height="19" title="ru" alt="ru" /></a> TEXT TEXT <div id="pixxell"> <a href="https://mywebsite.com/en/book-miracle.html">I find a miracle </div> TEXT TEXT
-
so, the second tag
<img src=...>
is extracted from the<div class="search">
section. Must be taken into account this part. -
Hi, @hellena-crainicu, @terry-r and All,
I’m really sorry but I still don’t understand what is your goal !
- First, my last regex
(?s)<link\h+rel="canonical"\h*\Khref="([^"]+)"((?!<link).)+?<a href="(?!\1).+?"
, unlike you said, does not match anything against your last text, even if I remove the partsTEXT TEXT
!? Anyway, I don’t care about it as the next regex version will surely be very different !
Now, the important points are :
- Firstly : Does the
HTML
text that you provided, and which is repeated, below, represents a real part of youHTML
files ?
<link rel="canonical" href="https://mywebsite.com/en/truth.html" /> <meta name="copyright" content="me, https://mywebsite.com/"/> <link rel="sitemap" type="application/rss+xml" href="rss.xml" /> <link rel="image_src" type="image/jpeg" href="https://mywebsite.com/icon-facebook.jpg" style="display:none"/> <meta itemprop="image" content="https://mywebsite.com/icon-facebook.jpg"/> <meta property="og:image" content="https://mywebsite.com/icon-facebook.jpg"/> <meta property="og:type" content="article" /> <meta property="fb:app_id" content="2156440"/> <meta property="fb:admins" content="16454242"/> <meta property="og:url" content="https://mywebsite.com/en/other-car.html"/> <body> TEXT TEXT <div class="search"> <div align="left"> <a href="https://mywebsite.com/hope.html"><img src="index_files/flag_lang_ro.jpg" title="ro" alt="ro" width="28" height="19" /></a> <a href="https://mywebsite.com/fr/book.html"><img src="index_files/flag_lang_fr.jpg" title="fr" alt="fr" width="28" height="19" /></a> <a href="https://mywebsite.com/en/truth.html"><img src="index_files/flag_lang_en.jpg" title="en" alt="en" width="28" height="19" /></a> <a href="https://mywebsite.com/es/green.html"><img src="index_files/flag_lang_es.jpg" title="es" alt="es" width="28" height="19" /></a> <a href="https://mywebsite.com/pt/yellow.html"><img src="index_files/flag_lang_pt.jpg" title="pt" alt="pt" width="28" height="19" /></a> <a href="https://mywebsite.com/ar/truth.html"><img src="index_files/flag_lang_ae.jpg" width="28" height="19" title="ar" alt="ar" /></a> <a href="https://mywebsite.com/zh/truth.html"><img src="index_files/flag_lang_zh.jpg" width="28" height="19" title="zh" alt="zh" /></a> <a href="https://mywebsite.com/hi/truth.html"><img src="index_files/flag_lang_hi.jpg" width="28" height="19" title="hi" alt="hi" /></a> <a href="https://mywebsite.com/de/truth.html"><img src="index_files/flag_lang_de.jpg" width="28" height="19" title="de" alt="de" /></a> <a href="https://mywebsite.com/ru/truth.html"><img src="index_files/flag_lang_ru.jpg" width="28" height="19" title="ru" alt="ru" /></a> TEXT TEXT <div id="pixxell"> <a href="https://mywebsite.com/en/book-miracle.html">I find a miracle </div> TEXT TEXT
-
Secondly : If so, I suppose that the first line
<link rel="canonical" href="https://mywebsite.com/en/truth.html" />
with the linkhttps://mywebsite.com/en/truth.html
is the first of the two links to consider in the future ( correct ! ) regex -
Thirdly : I also suppose that any of the links, below, after
<div class="search">
, and which are followed with an<img src=•••••>
tag are taken as a second link to be considered in the future regex
href="https://mywebsite.com/hope.html"> href="https://mywebsite.com/fr/book.html"> href="https://mywebsite.com/en/truth.html"> href="https://mywebsite.com/es/green.html"> href="https://mywebsite.com/pt/yellow.html"> href="https://mywebsite.com/ar/truth.html"> href="https://mywebsite.com/zh/truth.html"> href="https://mywebsite.com/hi/truth.html"> href="https://mywebsite.com/de/truth.html"> href="https://mywebsite.com/ru/truth.html">
Fourthly : As the tag
<link rel="canonical"••••" />
contains the linkhref="https://mywebsite.com/en/truth.html
, I suppose that, considering the list of links, above, you would like that the regex matches :-
FROM the expression
<link rel="canonical" href="https://mywebsite.com/en/truth.html" />
or, at least, its linkhref="https://mywebsite.com/en/truth.html"
-
TO the first link different from
href="https://mywebsite.com/en/truth.html"
, so, in this example, the first link of the listhref="https://mywebsite.com/hope.html">
As you can see, it’ is generally much more difficult to fully understand what are the OP’s needs than finding out any kind of regex ;-))
BR
guy038
- First, my last regex
-
@Hellena-Crainicu said in Regex: Find those files that doesn't contain the same link in 2 different html tags:
so, the second tag <img src=…> is extracted from the <div class=“search”> section
So hopefully you now understand providing us the most accurate information possible is key to getting a workable solution.
With my regex I think all you need to add is
</a> <a href="
directly in front of the secondhttps
string. I’m not on a PC currently, instead typing on a smartphone. But if you can try adding these characters I think my regex will work. It’s all a matter of getting the regex to consume characters up until the https tag we wish to check against. This adjustment should get you there. That is unless there are othernbsp
in between. But then your own regex was using thenbsp
as well so I feel confident.Terry
-
There are 2 particular lines, which is not repeated:
<link rel="canonical" href="https://mywebsite.com/en/truth.html" />
and
<img src="index_files/flag_lang_de.jpg" width="28" height="19" title="de" alt="de" /></a> <a href="https://mywebsite.com/en/love.html"><img src="index_files/flag_lang_ru.jpg" width="28" height="19" title="ru" alt="ru" /></a>
So, to be much better understood. I translated the site into ten languages.
For french section I have
href="https://mywebsite.com/fr/truth.html">
For russian section I havehref="https://mywebsite.com/ru/truth.html">
so on. See those little De / FR / Ru / Hi / Ar …
I want to check if there is any link that I omitted (in the German section, “de”), and this link for german section is only found in the line with
<img src =
Note that the links in English and German are the same, only the content of the html files is different.
the line with
<canonical
represents the page in English. For example:https://mywebsite.com/en/truth.html
the
<img src=.. tag
has also a link, but that link must behttps://mywebsite.com/de/truth.html
not the same as canonicalhttps://mywebsite.com/en/truth.html
That is why I must find those files that doesn’t contain the same link on canonical an <img …de> tag. If are identically, means that I miss to translate the german section ( /de/ ). Because I copy the file from english, and translated only the text.
-
@guy038 said in Regex: Find those files that doesn't contain the same link in 2 different html tags:
I’m really sorry but I still don’t understand what is your goal !
I could see early on that this was where this thread was going to go; sometimes you can just “spot them”. :-)
Kudos to @guy038 and @Terry-R for carrying things on… -
I believe, much more simple was to use the
?!
operators.Find with Regex:
alt="de" /></a> <a href="https://mywebsite.com/(?!de)
because the important was not to have the same link for english part. Once it does not have EN it means that it is not the same. ;)
-
Hi, @hellena-crainicu, @terry-r, @alan-kilborn and All,
@hellena-crainicu, in this post, you provided an
HTMl
text which contained this very long line :<a href="https://mywebsite.com/hope.html"><img src="index_files/flag_lang_ro.jpg" title="ro" alt="ro" width="28" height="19" /></a> <a href="https://mywebsite.com/fr/book.html"><img src="index_files/flag_lang_fr.jpg" title="fr" alt="fr" width="28" height="19" /></a> <a href="https://mywebsite.com/en/truth.html"><img src="index_files/flag_lang_en.jpg" title="en" alt="en" width="28" height="19" /></a> <a href="https://mywebsite.com/es/green.html"><img src="index_files/flag_lang_es.jpg" title="es" alt="es" width="28" height="19" /></a> <a href="https://mywebsite.com/pt/yellow.html"><img src="index_files/flag_lang_pt.jpg" title="pt" alt="pt" width="28" height="19" /></a> <a href="https://mywebsite.com/ar/truth.html"><img src="index_files/flag_lang_ae.jpg" width="28" height="19" title="ar" alt="ar" /></a> <a href="https://mywebsite.com/zh/truth.html"><img src="index_files/flag_lang_zh.jpg" width="28" height="19" title="zh" alt="zh" /></a> <a href="https://mywebsite.com/hi/truth.html"><img src="index_files/flag_lang_hi.jpg" width="28" height="19" title="hi" alt="hi" /></a> <a href="https://mywebsite.com/de/truth.html"><img src="index_files/flag_lang_de.jpg" width="28" height="19" title="de" alt="de" /></a> <a href="https://mywebsite.com/ru/truth.html"><img src="index_files/flag_lang_ru.jpg" width="28" height="19" title="ru" alt="ru" /></a>
In order to better see all the contents of this loooooong line, I split it into
10
lines, corresponding to your10
languages !<a href="https://mywebsite.com/hope.html"><img src="index_files/flag_lang_ro.jpg" title="ro" alt="ro" width="28" height="19" /></a> <a href="https://mywebsite.com/fr/book.html"><img src="index_files/flag_lang_fr.jpg" title="fr" alt="fr" width="28" height="19" /></a> <a href="https://mywebsite.com/en/truth.html"><img src="index_files/flag_lang_en.jpg" title="en" alt="en" width="28" height="19" /></a> <a href="https://mywebsite.com/es/green.html"><img src="index_files/flag_lang_es.jpg" title="es" alt="es" width="28" height="19" /></a> <a href="https://mywebsite.com/pt/yellow.html"><img src="index_files/flag_lang_pt.jpg" title="pt" alt="pt" width="28" height="19" /></a> <a href="https://mywebsite.com/ar/truth.html"><img src="index_files/flag_lang_ae.jpg" width="28" height="19" title="ar" alt="ar" /></a> <a href="https://mywebsite.com/zh/truth.html"><img src="index_files/flag_lang_zh.jpg" width="28" height="19" title="zh" alt="zh" /></a> <a href="https://mywebsite.com/hi/truth.html"><img src="index_files/flag_lang_hi.jpg" width="28" height="19" title="hi" alt="hi" /></a> <a href="https://mywebsite.com/de/truth.html"><img src="index_files/flag_lang_de.jpg" width="28" height="19" title="de" alt="de" /></a> <a href="https://mywebsite.com/ru/truth.html"><img src="index_files/flag_lang_ru.jpg" width="28" height="19" title="ru" alt="ru" /></a>
Now, if we isolate the line, relative to German, we get :
<a href="https://mywebsite.com/de/truth.html"><img src="index_files/flag_lang_de.jpg" width="28" height="19" title="de" alt="de" /></a>
Apparently, in that line, the link
<a href="https://mywebsite.com/de/truth.html">
seems to occur fisrt and the partalt="de"
seems to occur later !Now the regex of your last post seems to search, first for the
alt="de" /></a>
string, followed with a space char and then, for the beginning of thea
tag :<a href="https://mywebsite.com/(?!de)
So, exactly the opposite that your previous example !? Again, I totally confused ! Could you provide us an exact and real example ?
Best Regards,
guy038
-
@Hellena-Crainicu said in Regex: Find those files that doesn't contain the same link in 2 different html tags:
I want to check if there is any link that I omitted (in the German section, “de”), and this link for german section is only found in the line with <img src =
At this point (thanks @Alan-Kilborn) I’m about to throw in the towel (that means give up). I don’t think even with your latest post I’m entirely clear on what you need to do.
I understand you have the first line in the set which has the
<link rel="canonical" href="https://mywebsite.com/en/truth.html" />
First question, which part of the link are you testing against. Is itmywebsite.com/en/truth.html
or justtruth.html
?I get that further into the set you have duplicate information, each with a language mentioned, fr, en, es, pt, ar, zh, hi, de, ru. Second question, is it that you only want to test the https reference with the
de
portion?A third question. In each html file is there just 1 set of the "link rel=… to … I ask that as even the last example suggested the example was not complete. There are the starting tags
<div class="search">
and<div align="left">
yet no close on these tags appear (</div>
). We need to be clear on what content exists if the example isn’t complete. What other data have you excluded? You have already excluded data which you thought irrelevent yet later you realise it was important. Anything which appears in the area starting where the test starts and the end point of the test (so between the 2 https references) is relevant and must be included to give the best chance of supplying a workable solution.Please answer all 3 questions precisely. If unable to, then the towel gets chucked and I’m out. And as @guy038 asks, your original regex where you look for the
alt="de"
string followed by https reference is clearly wrong as thealt='de'
appears after the assigned https reference. It’s good that someone else spotted that as I was reading the example multiple times wondering how it should have worked with your regexes.One parting suggestion. It’s almost at the point where making copies of all the files and editing each to remove unneeded portions would greatly simplify the resulting regex to do the actual test. You would leave enough unique information so that the relevant section (if more than 1 in each file) would show you where to look in the appropriate original file so you could perform the necessary edit to fix the link.
Terry
-
hello @guy038 Was my mistake, should be:
<a href="https://mywebsite.com/ru/truth.html
<a href="https://mywebsite.com/hope.html"><img src="index_files/flag_lang_ro.jpg" title="ro" alt="ro" width="28" height="19" /></a> <a href="https://mywebsite.com/fr/book.html"><img src="index_files/flag_lang_fr.jpg" title="fr" alt="fr" width="28" height="19" /></a> <a href="https://mywebsite.com/en/truth.html"><img src="index_files/flag_lang_en.jpg" title="en" alt="en" width="28" height="19" /></a> <a href="https://mywebsite.com/es/green.html"><img src="index_files/flag_lang_es.jpg" title="es" alt="es" width="28" height="19" /></a> <a href="https://mywebsite.com/pt/yellow.html"><img src="index_files/flag_lang_pt.jpg" title="pt" alt="pt" width="28" height="19" /></a> <a href="https://mywebsite.com/ar/truth.html"><img src="index_files/flag_lang_ae.jpg" width="28" height="19" title="ar" alt="ar" /></a> <a href="https://mywebsite.com/zh/truth.html"><img src="index_files/flag_lang_zh.jpg" width="28" height="19" title="zh" alt="zh" /></a> <a href="https://mywebsite.com/hi/truth.html"><img src="index_files/flag_lang_hi.jpg" width="28" height="19" title="hi" alt="hi" /></a> <a href="https://mywebsite.com/de/truth.html"><img src="index_files/flag_lang_de.jpg" width="28" height="19" title="de" alt="de" /></a> <a href="https://mywebsite.com/ru/truth.html"><img src="index_files/flag_lang_ru.jpg" width="28" height="19" title="ru" alt="ru" /></a>
so my last regex should be:
alt="de" /></a> <a href="https://mywebsite.com/(?!ru)
The problem of this forum is that I cannot edit again the post after couples of minutes, and I forgot to change. Of course, I didn’t think anyone would be interested anymore.
-
@Hellena-Crainicu said in Regex: Find those files that doesn't contain the same link in 2 different html tags:
The problem of this forum is that I cannot edit again the post after couples of minutes, and I forgot to change.
It’s good to have the posting history, exactly as it is.
That way, later posts will make sense.
If earlier posts could change, I think we’d totally have a mess in some of the threads here (and probably this thread is a great example of that).
If you have new/corrected information, just add an additional post.BUT…be aware the those helping you are putting a lot of time/effort into it.
So you really should think hard about what you are posting and try to get it right the first time, to avoid others wasting their time.
Sure, errors happen, but there’s a difference between and honest mistake and someone that just hasn’t bothered to think things through enough. -
This post is deleted! -
This post is deleted! -
happy Easter, friends.
Another solution can be next one:
- Select the link you want from canonical line:
(<link rel="canonical" href=")(.*?)(" \/>)
- Select the second link from ru section:
(alt="de" \/></a> <a href=")(.*?)(><img src="index_files\/flag_lang_ru)
- Combine these 2 regex in the same way
(.*?)
and put(\2)
on second link, after(.*?)
(this selects the second bracket, so the link in the canonical line)
So the regex become:
(<link rel="canonical" href=")(.*?)(" \/>)(.*?)(alt="de" \/></a> <a href=")(.*?)(\2)(><img src="index_files\/flag_lang_ru)
eventualy, we can try
(?!\2)
instead of(\2)
and make a FIND with .matches newslineSo the regex become:
(<link rel="canonical" href=")(.*?)(" \/>)(.*?)(alt="de" \/></a> <a href=")(.*?)(?!\2)(><img src="index_files\/flag_lang_ru)
Don’t know why is not working. I believe my thinking was correct. :)
<link rel="canonical" href="https://mywebsite.com/en/truth.html" /> <meta name="copyright" content="me, https://mywebsite.com/"/> <link rel="sitemap" type="application/rss+xml" href="rss.xml" /> <link rel="image_src" type="image/jpeg" href="https://mywebsite.com/icon-facebook.jpg" style="display:none"/> <meta itemprop="image" content="https://mywebsite.com/icon-facebook.jpg"/> <meta property="og:image" content="https://mywebsite.com/icon-facebook.jpg"/> <meta property="og:type" content="article" /> <meta property="fb:app_id" content="2156440"/> <meta property="fb:admins" content="16454242"/> <meta property="og:url" content="https://mywebsite.com/en/other-car.html"/> <body> TEXT TEXT <div class="search"> <div align="left"> <a href="https://mywebsite.com/hope.html"><img src="index_files/flag_lang_ro.jpg" title="ro" alt="ro" width="28" height="19" /></a> <a href="https://mywebsite.com/fr/book.html"><img src="index_files/flag_lang_fr.jpg" title="fr" alt="fr" width="28" height="19" /></a> <a href="https://mywebsite.com/en/truth.html"><img src="index_files/flag_lang_en.jpg" title="en" alt="en" width="28" height="19" /></a> <a href="https://mywebsite.com/es/green.html"><img src="index_files/flag_lang_es.jpg" title="es" alt="es" width="28" height="19" /></a> <a href="https://mywebsite.com/pt/yellow.html"><img src="index_files/flag_lang_pt.jpg" title="pt" alt="pt" width="28" height="19" /></a> <a href="https://mywebsite.com/ar/truth.html"><img src="index_files/flag_lang_ae.jpg" width="28" height="19" title="ar" alt="ar" /></a> <a href="https://mywebsite.com/zh/truth.html"><img src="index_files/flag_lang_zh.jpg" width="28" height="19" title="zh" alt="zh" /></a> <a href="https://mywebsite.com/hi/truth.html"><img src="index_files/flag_lang_hi.jpg" width="28" height="19" title="hi" alt="hi" /></a> <a href="https://mywebsite.com/de/truth.html"><img src="index_files/flag_lang_de.jpg" width="28" height="19" title="de" alt="de" /></a> <a href="https://mywebsite.com/ru/truth.html"><img src="index_files/flag_lang_ru.jpg" width="28" height="19" title="ru" alt="ru" /></a> TEXT TEXT <div id="pixxell"> <a href="https://mywebsite.com/en/book-miracle.html">I find a miracle </div> TEXT TEXT
- Select the link you want from canonical line: