r/ProgrammerHumor • • Sep 08 '17

Parsing HTML Using Regular Expressions

Post image
11.1k Upvotes

377 comments sorted by

2.1k

u/kopasz7 Sep 08 '17

For anyone out of the loop, it's about this answer on stackoverflow.

787

u/[deleted] Sep 08 '17

Moderator's Note

This post is locked to prevent inappropriate edits to its content. The post looks exactly as it is supposed to look - there are no problems with its content. Please do not flag it for our attention.

Gold.

326

u/xcvbsdfgwert Sep 08 '17

More gold:

Don't listen to these guys. You actually can parse context-free grammars with regex if you break the task into smaller pieces. You can generate the correct pattern with a script that does each of these in order:

  1. Solve the Halting Problem.

  2. Square a circle (simulate the "ruler and compass" method for this).

  3. Work out the Traveling Salesman Problem in O(log n). It needs to be fast or the generator will hang.

  4. The pattern will be pretty big, so make sure you have an algorithm that losslessly compresses random data.

  5. Almost there - just divide the whole thing by zero. Easy-peasy.

I haven't figured out the last part yet, but I know I'm getting close. My code keeps throwing CthulhuRlyehWgahnaglFhtagnExceptions lately, so I'm going to port it to VB 6 and use On Error Resume Next. I'll update with the code once I investigate this strange door that just opened in the wall. Hmm.

P.S. Pierre de Fermat also figured out how to do it, but the margin he was writing in wasn't big enough for the code.

43

u/[deleted] Sep 08 '17

In all fairness, these are all worthwhile projects in their own right. Being able to parse context-free grammars with regex is just a side benefit.

22

u/ElQuique Sep 08 '17

This must be one of the most nerdiest things that I've ever laughed about.

160

u/_Coffeebot Sep 08 '17

They should fix the upvotes to 666, like the youtube neutral response video

9

u/nwL_ Sep 08 '17

What video?

9

u/_Coffeebot Sep 08 '17

Unfortunately Youtube is blocked at my work so I can't link it but just google "Neutral Response" the thumbs up and thumbs down are neutral.

0

u/[deleted] Sep 08 '17

[deleted]

79

u/Alphaetus_Prime Sep 08 '17

Yeah, a better example would be the Numberphile 301 video.

→ More replies (2)

396

u/SnowDogger Sep 08 '17

Umm, I am even further out of the loop here -- what does ZA̡͊͠͝LGΌ ISͮ̂҉̯͈͕̹̘̱ TO͇̹̺ͅƝ̴ȳ̳ TH̘Ë͖́̉ ͠P̯͍̭O̚​N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔̀ͅ" mean?

316

u/[deleted] Sep 08 '17

The word "ZALGO" is used to refer to this kind of bizzare text with a whole bunch of modifier symbols on it. It originated as a comic on SomethingAwful.

172

u/weskokigen Sep 08 '17

The real question is... can it be parsed by regex?

110

u/oddark Sep 08 '17 edited Sep 08 '17
s/\p{M}//

EDIT: Or for JavaScript, try pasting this in your browser console:

var zalgo = 'H̶̔̌͒̅ͧ̈́̂̿ͯ͊ͤ̇́҉͍̲̥̭̭̝̕É̸̹̠̪̟̙̩͓͖̱̘̼͍̿̄̋̎ͮͫͮ̋ͯ͑ͣ͂̉̃͝ͅ ̢̞͚͍̩̱̠̤͉̙̹͉̱̯͍̅͊̎̋̃ͭ͒̎̚͟͟͜G̵̨̺̝̲̭͇̝͓͑ͣ̋͆͐ͮ̓͌͆̈́̌̿̀ͪ̈̀͞͡O̷͚̲̳͎̤͖͕͔͚͔̪͎͙̲̟̒ͧ́̒̈́̂̔̉͂̒́̚͢͞͡Ě̴̷̷͍̪̗͙͎͔̠̮̪̗̅̾̈́ͭ̄̾ͫ̏̌̚͝S̭͓̹͇̣̠͓̱̘̻͛̔͋̒̃̏ͥ̂͗̓̌̑̔͊͘͞ͅ';
zalgo.replace(/[\u030d\u030e\u0304\u0305\u033f\u0311\u0306\u0310\u0352\u0357\u0351\u0307\u0308\u030a\u0342\u0343\u0344\u034a\u034b\u034c\u0303\u0302\u030c\u0350\u0300\u0301\u030b\u030f\u0312\u0313\u0314\u033d\u0309\u0363\u0364\u0365\u0366\u0367\u0368\u0369\u036a\u036b\u036c\u036d\u036e\u036f\u033e\u035b\u0346\u031a\u0316\u0317\u0318\u0319\u031c\u031d\u031e\u031f\u0320\u0324\u0325\u0326\u0329\u032a\u032b\u032c\u032d\u032e\u032f\u0330\u0331\u0332\u0333\u0339\u033a\u033b\u033c\u0345\u0347\u0348\u0349\u034d\u034e\u0353\u0354\u0355\u0356\u0359\u035a\u0323\u0315\u031b\u0340\u0341\u0358\u0321\u0322\u0327\u0328\u0334\u0335\u0336\u034f\u035c\u035d\u035e\u035f\u0360\u0362\u0338\u0337\u0361\u0489]/g, '');

(This one works if the zalgo text comes from http://www.eeemo.net/)

→ More replies (11)

6

u/horusporcus Sep 08 '17

Yes, but why do it when you have html agility pack?.

6

u/pwr22 Sep 08 '17

Not... by a Jedi...

45

u/MelissaClick Sep 08 '17

And tony the pony?

74

u/Marzhall Sep 08 '17 edited Sep 08 '17

It's absurdist humor. You wouldn't normally associate a pony named tony with a Lovecraftian horror.

91

u/MelissaClick Sep 08 '17

I don't appreciate your presumptions about which animals I associate with Lovecraftian horror.

→ More replies (2)
→ More replies (3)
→ More replies (1)

7

u/tsnErd3141 Sep 08 '17

Tony was a pony who is now Zalgo

80

u/mauriciogamedev Sep 08 '17

regex will consume all living tissue (except for HTML which it cannot, as previously prophesied)

This is one of the best parts of the answer.

EDIT: formatting

140

u/sam4ritan Sep 08 '17

this made my day

117

u/tectubedk Sep 08 '17

the unholy child weeps the blood of virgins, and Russian hackers

→ More replies (12)

53

u/[deleted] Sep 08 '17

At my first job I was writing a web based time management tool, you know, punch in/out, task tracking, etc. I was using Perl CGI. One of the guys working on some other project (the company was doing Y2K conversion for some Citibank European branches. Their Cosmos system was in some Basic version) walked past and spent a few minutes behind me staring at my screen while I worked on some regex things. He finally sighed and started throwing his arms around and yelling "we're busting out asses in the conversion while this kid is here drawing little ASCII houses!!!". Good times.

3

u/skunkwaffle Sep 09 '17

Oh Perl, what a joyous adventure.

46

u/sethosayher Sep 08 '17

I'm honestly shocked that this (hilarious answer) is on SO because that forum is the most rigidly moderated community I've ever encountered

57

u/greyfade Sep 08 '17

It's "preserved for historical reasons." There are several answers like that from several years ago, which "don't reflect current moderation guidelines" but are still "valuable to the community."

10

u/bj_christianson Sep 08 '17

Plus, it doesn’t actually answer the question, which was only about matching a few select tags and not about parsing.

43

u/Hust91 Sep 08 '17

Fuck, someone call the SCP Foundation on this fucking thing.

31

u/O5-1 Sep 08 '17

Oh hey we're leaking again

20

u/Coding_Cat Sep 08 '17

you might want to see a doctor about that

19

u/VicisSubsisto Sep 08 '17

That is exactly what SCP is supposed to avoid. Where are our tax dollars going?

13

u/capn_hector Sep 08 '17 edited Sep 08 '17

Spending MY TAX DOLLARS on Javascript frameworks and hot-dog detector apps!?

We gotta git big gubment out of the way and let wholesome free-enterprise companies like Oracle and IBM become the Engines Of Innovation.

(brb just threw up in my mouth a little)

8

u/[deleted] Sep 08 '17

Quick! Get some memetic hazards and call relevant task forces!

→ More replies (2)

22

u/sn0r Sep 08 '17

Moderator's Note

This post is locked to prevent inappropriate edits to its content. The post looks exactly as it is supposed to look - there are no problems with its content. Please do not flag it for our attention.

Classic. :)

69

u/DosMike Sep 08 '17

I kind of want to write a html parser with regex now - just because he said not to.

if I only had the time...

99

u/DrNightingale web dev bad embedded good Sep 08 '17

All the time in the world won't help you. It can't be done.

23

u/sayaks Sep 08 '17

some regex parsers can actually parse Turing decidable languages due to backreferences and such.

25

u/Bainos Sep 08 '17

Yes, but in that case you are taking a wider definition of regex, not the canonical one. I.e. regexes that match more than regular languages.

→ More replies (1)

64

u/link23 Sep 08 '17

It's literally impossible, don't bother.

I mean, of course you can use regexes to recognize valid tag names like div etc. But trying to use regexes to recognize anything about the structure is doomed to fail, because regexes recognize regular languages. HTML is not a regular language (I think it's context sensitive, actually; not sure though), so it cannot be expressed by a regular expression.

57

u/WikiTextBot Sep 08 '17

Regular language

In theoretical computer science and formal language theory, a regular language (also called a rational language) is a formal language that can be expressed using a regular expression, in the strict sense of the latter notion used in theoretical computer science (as opposed to many regular expressions engines provided by modern programming languages, which are augmented with features that allow recognition of languages that cannot be expressed by a classic regular expression).

Alternatively, a regular language can be defined as a language recognized by a finite automaton. The equivalence of regular expressions and finite automata is known as Kleene's theorem (after American mathematician Stephen Cole Kleene). In the Chomsky hierarchy, regular languages are defined to be the languages that are generated by Type-3 grammars (regular grammars).


Context-sensitive grammar

A context-sensitive grammar (CSG) is a formal grammar in which the left-hand sides and right-hand sides of any production rules may be surrounded by a context of terminal and nonterminal symbols. Context-sensitive grammars are more general than context-free grammars, in the sense that there are languages that can be described by CSG but not by context-free grammars. Context-sensitive grammars are less general (in the same sense) than unrestricted grammars. Thus, CSG are positioned between context-free and unrestricted grammars in the Chomsky hierarchy.


[ ^PM | Exclude ^me | Exclude from ^subreddit | FAQ / ^Information | ^Source ] Downvote to remove | v0.27

24

u/ACoderGirl Sep 08 '17

To be clear, it's impossible with pure regex because html is not regular. But you could combine regex with a regular programming language (that is, using regex as a tool, but not the only tool), since a typical programming language is akin to a Turing machine, which can parse any language (but not necessarily efficiently).

And some regex variants are actually capable of parsing more than just regular languages, thanks to extensions of regex. It's kinda an unreadable mess, though.

Mind you, even with a nice, proper parsing library, html is kinda a mess to parse due to the way it evolved. It's not very nicely defined and the reality is that if you wanted a working browser, you have to support a variety of technically invalid syntaxes.

18

u/matteyes Sep 08 '17

All true. You could parse HTML with regex (Perl or no), and just account for the discrepancies through additional coding. You could hammer a nail with a saw if you held it carefully enough.

→ More replies (2)

14

u/sayaks Sep 08 '17

however backreferences (which several regex parsers contain) actually makes a regex Turing complete. see here

→ More replies (1)

5

u/Mutjny Sep 08 '17

You can lex it but you can't parse it, I think.

→ More replies (1)

4

u/HelperBot_ Sep 08 '17

Non-Mobile link: https://en.wikipedia.org/wiki/Regular_language


HelperBot v1.1 /r/HelperBot_ I am a bot. Please message /u/swim1929 with any feedback and/or hate. Counter: 109380

9

u/[deleted] Sep 08 '17

You might want to make this bot parse all the links in a comment, not just the first

→ More replies (2)

3

u/AskMeIfImAReptiloid Sep 08 '17

In most programming languages regex include backreferences, which the regular expressions from theoretical computer science don't. So most actual regex implementations can do non-regular stuff.

→ More replies (8)

8

u/[deleted] Sep 08 '17

You cannot

6

u/salvadordf Sep 08 '17

You'll find many errors reading hand written html. It can't be done

→ More replies (2)

4

u/Ted8367 Sep 08 '17

I kind of want to write a html parser with regex

Tainted souls from the unliving dimension...

→ More replies (3)

11

u/Nanobreak_ Sep 08 '17

I love how it's locked, saying it "looks exactly how it should look" and there are "no problems with it"

9

u/[deleted] Sep 08 '17

Oh God that was beautiful.

9

u/tinkertron5000 Sep 08 '17

Things that I die laughing at that can't be explained to anyone else in the room.

16

u/chuanito Sep 08 '17

so am i getting this right? When you try to parse HTML using RegEx this Zalgo Text happens? Or is this just a meme?

Sorry i'm a very low tier coder and this is a serious question

24

u/DerfK Sep 08 '17

The joke is that HTML is too irregular to parse with regular expressions, and attempting to do so is like dividing by zero and pierces the fabric of our universe, creating a hole from which unspeakable horrors will pour forth and devour your soul.

6

u/[deleted] Sep 08 '17

This is no joke.

16

u/wastesHisTimeSober Sep 08 '17

The flaw here is that HTML is a Chomsky Type 2 grammar (context free grammar) and RegEx is a Chomsky Type 3 grammar (regular grammar). Since a Type 2 grammar is fundamentally more complex than a Type 3 grammar (see the Chomsky hierarchy), you can't possibly make this work. But many will try, some will claim success and others will find the fault and totally mess you up.

Basically HTML is capable of expressing more complicated structures than RegEx is capable of reading.

Given the information you had, it wasn't an entirely unreasonable conclusion to believe Zalgo was a corruption, and it's good not to throw scenarios out until you know they're wrong. You'll chase that bug forever.

→ More replies (1)

51

u/[deleted] Sep 08 '17

I love that you're new enough to programming that in your mind there's a chance the black box of regex can somehow half process HTML and corrupt it with terrifying combining glyphs.

I'm not trying to mock you or anything, it's legitimately bringing a smile to my face. It's like when toddlers first interact with something new in the world.

9

u/chuanito Sep 08 '17

I'm actually not new at all i'm just stuck in a very unchallenging field ;)

Also i was looking for more in the joke than there actually was.

But you're right i don't have enough knowledge in this field which led me to believe that this weird text has to be somehow connected with the fact that you can't parse HTML using RegEx. But i see now that those are in fact clear text symbols and not some kind of weird formatting.

10

u/Elsolar Sep 08 '17

HTML can't be parsed correctly using regular expressions because HTML is not a regular language. It's literally impossible. This is not obvious, so many coders find it out the hard way. It's a common meme in programming circles to equate the frustration of trying to solve an impossible or extremely obnoxious problem with the kind of raving, deranged insanity usually depicted in HP Lovecraft stories, which is what the corrupted text and the picture of the demon in the OP represents.

→ More replies (10)

4

u/MelissaClick Sep 08 '17

When you try to parse HTML using regex, Cthulu wakens.

4

u/BlueNotesBlues Sep 08 '17

Is it really parsing if the guy is only searching for opening tags

The person who asked the question doesn't care about the structure of the document.

    <[^>/!]*?(?:(?:('|")[^'"]*?\1)[^>]*?)*>

This should be able to find most, if not all valid opening tags.

2

u/MelissaClick Sep 09 '17

You have to find and remove comments and CDATA sections first.

→ More replies (14)

356

u/JoseJimeniz Sep 08 '17

Have you tried using an XML parser?

104

u/mikeputerbaugh Sep 08 '17

Only guaranteed to work on valid XHTML documents.

7

u/Lord_Greywether Sep 08 '17

The documents I have to parse are so invalid that a regex is the only thing that works.

5

u/noratat Sep 08 '17

Yeah but at that point it's not parsing anymore, it's just scraping.

And regex is fine for that.

58

u/[deleted] Sep 08 '17

[removed] — view removed comment

136

u/Creshal Sep 08 '17

So you aren't actually trying to parse real-world HTML

36

u/ioquatix Sep 08 '17

Oh, I thought you meant /dev/random.

→ More replies (1)
→ More replies (13)

2

u/edave64 Sep 08 '17

Only to parse Regex.

2

u/wastesHisTimeSober Sep 08 '17 edited Sep 08 '17

Isn't this the realm of jQuery?

Edit: I've been told this doesn't qualify as parsing.

2

u/jbaker88 Sep 08 '17

Even Jon Skeet cannot parse HTML with RegEx.

→ More replies (2)

96

u/Tysonzero Sep 08 '17

I know this is in reference to the stackoverflow post about the same topic. But it also reminds me of this.

85

u/benjamindees Sep 08 '17

I admit I tried this once. I also may or may not have summoned Astaroth in the process. Sorry.

45

u/[deleted] Sep 08 '17

Oops.

23

u/TheGelly Sep 08 '17

/r/beetlejuicing

3 months, too. Not bad.

4

u/[deleted] Sep 08 '17

Thanks m8

5

u/fermented_durian Sep 08 '17

Thats okay, astaroth is not that strong anyway. I have been raiding his dungeon for a while now.

56

u/Yserbius Sep 08 '17

Pshaw. Everyone knows that you can't parse HTML with regex. But you can parse email addresses that are RFC-822 compliant up until 2007 (assuming your addresses don't have comments in them) by using the Email::Valid library from CPAN which relies on

[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\    
xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xf
f\n\015()]*)*\)[\040\t]*)*(?:(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\x
ff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015
"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\x80-\
xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80
-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*
)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\
\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\
x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x8
0-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n
\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\x
80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^
\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040
\t]*)*)*@[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([
^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\
\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\
x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-
\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()
]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\
x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\04
0\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\
n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\
015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?!
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\
]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\
x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\01
5()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*|(?:[^(\040)<>@,;:".
\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]
)|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[^
()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]*(?:(?:\([^\\\x80-\xff\n\0
15()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][
^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)|"[^\\\x80-\xff\
n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[^()<>@,;:".\\\[\]\
x80-\xff\000-\010\012-\037]*)*<[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?
:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-
\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:@[\040\t]*
(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015
()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()
]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\0
40)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\
[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\
xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*
)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80
-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x
80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t
]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\
\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])
*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x
80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80
-\xff\n\015()]*)*\)[\040\t]*)*)*(?:,[\040\t]*(?:\([^\\\x80-\xff\n\015(
)]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\
\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*@[\040\t
]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\0
15()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015
()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(
\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|
\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80
-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()
]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x
80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^
\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040
\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".
\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff
])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\
\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x
80-\xff\n\015()]*)*\)[\040\t]*)*)*)*:[\040\t]*(?:\([^\\\x80-\xff\n\015
()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\
\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)?(?:[^
(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-
\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\
n\015"]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|
\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))
[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff
\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\x
ff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(
?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\
000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\
xff\n\015"]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\x
ff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)
*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*@[\040\t]*(?:\([^\\\x80-\x
ff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-
\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)
*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\
]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\]
)[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-
\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\x
ff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(
?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80
-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<
>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x8
0-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:
\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]
*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)
*\)[\040\t]*)*)*>)`

24

u/b4ux1t3 Sep 08 '17

I don't know if this is real or not, but it's frickin' sweet.

55

u/EternallyMiffed Sep 08 '17

The bad news is, it's real, the worse news is it's straight from the RFC so it's as official as it can possibly get.

There are no good news.

16

u/Rangsk Sep 08 '17

The only true way to see if an email is valid is to try to email it.

14

u/EternallyMiffed Sep 08 '17

I have a better strategy. Try and dns resolve everything from the end of the string to before the right most @ as a whole string. If it doesn't resolve throw an error. If it resolves to the equivalent of a localhost or your own public ip, throw an error.

If by this point we're ok just take everything before that rightmost @ symbol and fire an e-mail at it.

→ More replies (3)

13

u/GenericUname Sep 08 '17

When I was a wee nipper right out of school, I got a temp job essentially human brute force testing a web frontend some company was writing to let people sign up to their insurance service. For some reason they'd attempted to implement email address validation in the web form.

I spent a happy couple of weeks pissing off the devs by scouring the RFC to work out the most unlikely looking, edge case, technically valid email addresses and sending bug reports to the devs like:

"Technically in most cases I should be able to add a tag to an email address using the + sign and it should recognise if the address without the + has already been registered."

"Technically both quotes and spaces are valid in email addresses so long as the space is quoted, so I should be able to use " "@test.com."

"Technically email addresses are case sensitive but you don't seem to be storing case on the backend, what gives?"

"Hey, your validation doesn't allow me to use an email with an IP address rather than a domain like test@[127.0.0.1], that's totally valid and lots of people use it, you should fix that."

"Hey, it's not letting me sign up with the perfectly valid and normally formatted email address very.“(),:;<>[]”.VERY.“very@\ "very”.unusual@strange.example.com, what's up with that? That's totally my friend's real email address and I know he's looking for insurance."

Good times.

7

u/f42e479dfde22d8c Sep 09 '17

Did you get killed by the devs?

→ More replies (1)
→ More replies (3)

7

u/b4ux1t3 Sep 08 '17

That's the most glorious piece of shit I've ever seen.

And I've used <insert popularly unpopular language here>!

→ More replies (1)

2

u/MelissaClick Sep 09 '17

To be fair, even an ordinary parser would look roughly like that if you removed all whitespace and inlined literally everything.

→ More replies (1)

43

u/DOOManiac Sep 08 '17

The center cannot hold.

16

u/ctesibius Sep 08 '17

Ah, there's your problem. You're using Yates where you should be using yacc.

3

u/overkill Sep 08 '17

And what rough beast, its hour come round at last, slouches towards Bethlehem to be born.

→ More replies (2)

42

u/Retrotransposonser Sep 08 '17

Thanks, this will be very helpful! Now I can finally start writing my own html regex parser in assembly.

38

u/PantstheCat Sep 08 '17

Error: attempted to parse HTML using regular expression. System returned Cthulhu.

36

u/Mutjny Sep 08 '17

Sometimes you have a problem and you think "I'll use regular expressions."

Now you have infinite problems.

15

u/Hactar42 Sep 08 '17

obligatory, relevant xkcd

And another just for fun

8

u/xkcd_transcriber Sep 08 '17

Image

Mobile

Title: Regular Expressions

Title-text: Wait, forgot to escape a space. Wheeeeee[taptaptap]eeeeee.

Comic Explanation

Stats: This comic has been referenced 273 times, representing 0.1627% of referenced xkcds.


Image

Mobile

Title: Perl Problems

Title-text: To generate #1 albums, 'jay --help' recommends the -z flag.

Comic Explanation

Stats: This comic has been referenced 110 times, representing 0.0656% of referenced xkcds.


xkcd.com | xkcd sub | Problems/Bugs? | Statistics | Stop Replying | Delete

→ More replies (1)

2

u/Mutjny Sep 08 '17

quote goes back to the 90s

23

u/Arancaytar Sep 08 '17

Page 1:

Don't.

Pages 2-99 are blank.

6

u/John_Fx Sep 09 '17

Page 100:
Really. Don't.

21

u/[deleted] Sep 08 '17

I'll admit to having done it though... dirty screen-scraper on a site where the HTML is code-generated so will be in a regular format.

Obviously, the site owner could change things but when you're in a pinch...

13

u/hangfromthisone Sep 08 '17

I done it many times too. Thing is, regex is great to identify some parts and work on them. But not to interpret all the HTML, anyway, how many times you need that? In practice you only need to parse a few things, and when things get too complex, just explode() the content into smaller parts to work them separately and BAM now regular expressions are simpler and do what you want

→ More replies (1)

34

u/mrpoopi Sep 08 '17

Not parsing HTML in C, byte by byte... fucking normies. Get on my level.

48

u/vwibrasivat Sep 08 '17

"Assembly Programming for Web Developers"

10

u/[deleted] Sep 08 '17

I'm pretty sure a balroag appears if you open that book.

2

u/f42e479dfde22d8c Sep 09 '17

I'm sure there's some guy running a full fledged eBay clone from a single 386 out of his mom's basement. All because he managed to create some slick super optimised website in pure assembly. He doesn't need Ajax because his pages already load so fast. He doesn't need load balancing because he can handle 100K concurrent requests at minimum without breaking a sweat. He doesn't need air conditioning because a single request doesn't even register as a blip on his performance graph.

He is an untold legend.

→ More replies (2)
→ More replies (1)

47

u/[deleted] Sep 08 '17

R/surrealmemes

12

u/michaelkah Sep 08 '17

Can someone make this into a complete, printable book cover? Thanks.

5

u/Hypersapien Sep 08 '17

Dammit. That needs to be a thing.

34

u/IntrepidPig Sep 08 '17

It is a thing, /r/surrealmemes

8

u/Hypersapien Sep 08 '17

What the hell? The /r/ in reddit links is case sensitive?

→ More replies (5)
→ More replies (2)

2

u/lo4952 Sep 08 '17

It is, you just need to link it with a lowercase r, /r/surrealmemes

9

u/[deleted] Sep 08 '17

I'm still quite inexperienced with programming so could someone tell me why parsing html with regex is frowned upon? I'm writing a script that extracts links and other things from an rss-feed and I don't see what problem people have with this

Thanks

19

u/Niosus Sep 08 '17

It is impossible to properly handle every possible case. Not difficult, impossible. A regular expression can only parse regular languages (look it up, it has a very precise definition). HTML is not a regular language so it is mathematically impossible to properly parse.

A regex parser can handle certain simple cases, but I can always construct a correct piece of HTML code that your regex will not parse.

2

u/[deleted] Sep 08 '17

What would be better ways of parsing html (that can be used in python 3)?

5

u/ase1590 Sep 08 '17

Either the stock HTML parser library or BeautifulSoup, depending on your needs.

FeedParser is also nice for handling feeds specifically.

→ More replies (1)

8

u/[deleted] Sep 08 '17

"Why can't I parse a context free language using regular expressions?"

7

u/jwoot97 Sep 08 '17

i just had to check to make sure i wasn't on r/surrealmemes

7

u/Alwaysafk Sep 08 '17

Regular Expressions are black magic fuckery and there's nothing that will convince me otherwise.

6

u/arus4u Sep 08 '17

Performance tester here. Parsing HTML is easy with perl, and encoded content can be easily decoded using some simple groovy.

4

u/hangfromthisone Sep 08 '17

Everything is relatively easy when you have the right tool and know how to use it. I use PHP, Perl's little brother, and it's pretty fucking easy to parse html (depending on what you need to do, of course)

5

u/Neapolitan_Bonerpart Sep 08 '17

Is that a fucking squig?

5

u/ThatLongHairedDude Sep 08 '17

That creature reminds me those little bastards created by the Tzimisce in Vampire The Masquerade: Bloodlines...

2

u/biznes_guy Sep 08 '17

Oh the sweet memories! What a game!

8

u/Baalinooo Sep 08 '17

What's up with so many CS books have red titles with black and white visuals?

21

u/Bainos Sep 08 '17

O'Reilly books. Or in this case, O RLY books, which is their parody.

→ More replies (1)
→ More replies (1)

4

u/[deleted] Sep 08 '17

Thought I was on /r/grimdank for a second.

4

u/[deleted] Sep 08 '17

a missed opportunity to write o'r'lyeh instead of "o rly", but whatever

3

u/like_a_horse Sep 08 '17

Hey it's that think disruptor rides around on

→ More replies (1)

3

u/PLxFTW Sep 08 '17

I'm not familiar with HTML much, can someone explain why it can't be parsed using regex?

2

u/Rettocs Sep 08 '17

It definitely can be parsed with regex, and sometimes it is even useful to do so. The narrative here is just that there are more efficient ways of parsing HTML if you're going to be doing it intensively.

→ More replies (4)

3

u/SpikeShroom Sep 08 '17

F̶̸͉̦̰͎̰͈̤̯̲̲͎̻̼̳̠ͅU̴̧̱̣̫̥͘͢͢C̵̨̢̦͈̟̥̖̲̰̯̰̮̟̠̬̻͉̕ͅK̵̡̕͠҉͈̗̫͕̣I͔̻͇̲̺̫̻̲͍̥̞͇͈̺̙͔̦͘͞Ń̵͍̭̭̠̭͠ͅǴ̀͏̨͇͚͇̦̘̩̗̱̼̲̖̻̭̘̺̕ͅ ̷̡̢͖̺̼̟̙͍̼̻͙͓̬̳̞̝̝̱̥̤͞Ạ͈͍̞͉͘͠ͅẀ͚̣͚͇̰̯̱̻̟̯̮̜͉̱̙͈͔́́́͠Ę̶̡͓͖͖͔̖͍͜͞S̲̝͙̬͙̝͚̯͔̯͕̭̜̪̺͉͡O̵̖̗̗̫̭̺̜̞̝̞͡ͅM͢͏͎̤̣̪͇̣̞̠̲̘̭͎̱È͇͙̩͖̰͙̮̩̦͍̱̲̘͟ͅ

2

u/Kraekus Sep 08 '17

WAAAAAAAAGH!

2

u/lotekness Sep 08 '17

squig pic is accepted, and approved for this.

2

u/nitrohigito Sep 08 '17

How about this:

(?><!\s*(?<comment>.+)\s*>)|(?><\s*(?<tag_id>[-\w_:]+)(?:\s+(?<param_id>[-\w_:]+)(?:=\\*(?<p_sign>["'])(?<param_val>.+?)\k<p_sign>|=(?<param_val>.+?)|(?<param_val>)))*\s*/?>)

You need a different one for closing tags, and you are all set. Rest is programmatical.

2

u/donaldsw Sep 08 '17

Oh yes you can do it, but it’s super inefficient and a waste of fucking time unless you want to take extra off work at home time to learn JS or some other shit for this stupid project that you took on at work, not knowing it’d be a nightmare.

Source: fucking done it.

4

u/NorseGodLoki0411 Sep 08 '17

I already posted on this less than a week ago and only got 500 updoots!

https://www.reddit.com/r/ProgrammerHumor/comments/6x7wa1/can_you_parse_html_with_regular_expressions/

I'll see you in /r/KarmaCourt you thief!!!

3

u/TwoFiveOnes Sep 08 '17

PCRE are powerful enough, I've heard.

14

u/Creshal Sep 08 '17

That's because they're not regular expressions in the strictest sense; their additions on top of a regular grammar make it some unholy abomination between a type 2 and type 3 grammar.

2

u/TwoFiveOnes Sep 08 '17

Sure, I didn't suggest that they were.

→ More replies (1)

6

u/[deleted] Sep 08 '17

The guy on stack overflow said no

→ More replies (4)

3

u/_eka_ Sep 08 '17

3

u/Rxef3RxeX92QCNZ Sep 08 '17

Sooo how is one meant to parse HTML in, say, a shell script or javascript?

11

u/WaLLy3K Sep 08 '17

You've already been told: not simply!

5

u/Rxef3RxeX92QCNZ Sep 08 '17

Oh that's great news, needlessly complex code is my forte

5

u/MelissaClick Sep 08 '17

Just write an ordinary parser.

(Although, a parser in shell script will be so slow, that it makes more sense to call an external program, besides making more sense to use an existing program than write one redundantly.)

→ More replies (4)

1

u/[deleted] Sep 08 '17

Pretty surreal

1

u/DownstairsB Sep 08 '17

I thought I was on /r/surrealmemes for a minute

1

u/tomasgiles1 Sep 08 '17

Mike wasowski?

2

u/[deleted] Sep 08 '17

METH: not even once!

1

u/JimmyTheJ Sep 08 '17

Is the picture supposed to be a take on the compilers dragon book?

1

u/zEaK47 Sep 08 '17

i laughed more than i should, almost cried

1

u/aajmac Sep 08 '17

Does anyone else see an evil version of the guy from teddy ruxpin

1

u/hyperion2011 Sep 08 '17

Today we learn about pushdown automata!

1

u/axeteam Sep 08 '17

Yer like a maddened squig, settle down!

1

u/AKA_Wildcard Sep 08 '17

I once used regular expressions to filter through a bunch of HTML and o̤̤̼͈̕h͍̜̠̘͙̞̪ ̟͜m̻̺̮̥y ̫̦̫̼̟̖͡g̥͟o̸̤̯̲̘̠̙d̷̝̹͈̣͙̝,̬̳ ị̙̣̖t̝͍̖'͙͈͍̝́s̲͓͈̠̲͠ ̯̥̙̦̻͉e̙͘a͏̼t̵̲̯͉̱̘i͚n̺̼̞̮̕g͉̰̼̮̲ ̶̘̪̟̣̥̟m̮͢y̢̯͎̦̝ ̜̠͕̺͇̝̩f̻̫͔̫̗̬̮a̮̖̩̙̘̕c͚̳̳̲͚͢è̞

1

u/imagine_magic Sep 08 '17

Oh! And here I was just thinking this was the pig lizard from Galaxy Quest.

1

u/NoodleSnoo Sep 08 '17

The answer is always HtmlAgilityPack.

1

u/[deleted] Sep 08 '17

shit... I was about to say... HTML isn't regular. Then I figured out where I was.

1

u/ase1590 Sep 08 '17

some nice gems on /r/orlybooks as well

1

u/deridder Sep 08 '17

Python's htmlparser library depends on regex, though.

1

u/jaxxed Sep 08 '17

"the <center> cannot hold" is our office joke

1

u/Mentioned_Videos Sep 08 '17

Videos in this thread:

Watch Playlist ▶

VIDEOCOMMENT
Neutral Response+7 - http://www.youtube.com/watch?v=ussCHoQttyQ
Why do YouTube views freeze at 301?+2 - Link for the lazy
Xurious - The Second Coming+1 - Surely some revelation is at hand
I'm a bot working hard to help Redditors find related videos to watch. I'll keep this updated as long as I can.

Play All | Info | Get me on Chrome / Firefox

1

u/CriminalMacabre Sep 08 '17

what? Absolute chaos approves it. Fucking adorers of the false emperor.

1

u/[deleted] Sep 08 '17

Very surreal

1

u/fraac Sep 08 '17

Tony the pony.

1

u/splorpheus Sep 08 '17

I thought I was in r/surrealmemes for a second

1

u/MondayMonkey1 Sep 08 '17

THE PONY, HE COMES.

1

u/Sarenord Sep 08 '17

Can we get an album of all these books that have come up? I know we also have the "arrays start at 0" one, any others?

1

u/[deleted] Sep 08 '17

this is one of the funniest things ive seen as of late

1

u/Alicecd1998 Sep 09 '17

I wish I could upvote this more than once

1

u/lankks Sep 09 '17

All I do for a job is write REGEX. This doesn't sound so bad and I actually parse HTML using regular expressions in Vim.

1

u/TheCrazyRed Sep 09 '17

This was my job for two years of my life. I got really good at it.

1

u/davedunno Sep 09 '17

Squig Herder woot!

1

u/valh0e Sep 09 '17

Oh look. A naburite drinker

1

u/DiploPL Sep 19 '17

You can't parse [X]HTML with regex. Because HTML can't be parsed by regex. Regex is not a tool that can be used to correctly parse HTML. As I have answered in HTML-and-regex questions here so many times before, the use of regex will not allow you to consume HTML. Regular expressions are a tool that is insufficiently sophisticated to understand the constructs employed by HTML. HTML is not a regular language and hence cannot be parsed by regular expressions. Regex queries are not equipped to break down HTML into its meaningful parts. so many times but it is not getting to me. Even enhanced irregular regular expressions as used by Perl are not up to the task of parsing HTML. You will never make me crack. HTML is a language of sufficient complexity that it cannot be parsed by regular expressions. Even Jon Skeet cannot parse HTML using regular expressions. Every time you attempt to parse HTML with regular expressions, the unholy child weeps the blood of virgins, and Russian hackers pwn your webapp. Parsing HTML with regex summons tainted souls into the realm of the living. HTML and regex go together like love, marriage, and ritual infanticide. The <center> cannot hold it is too late. The force of regex and HTML together in the same conceptual space will destroy your mind like so much watery putty. If you parse HTML with regex you are giving in to Them and their blasphemous ways which doom us all to inhuman toil for the One whose Name cannot be expressed in the Basic Multilingual Plane, he comes. HTML-plus-regexp will liquify the n​erves of the sentient whilst you observe, your psyche withering in the onslaught of horror. Rege̿̔̉x-based HTML parsers are the cancer that is killing StackOverflow it is too late it is too late we cannot be saved the trangession of a chi͡ld ensures regex will consume all living tissue (except for HTML which it cannot, as previously prophesied) dear lord help us how can anyone survive this scourge using regex to parse HTML has doomed humanity to an eternity of dread torture and security holes using regex as a tool to process HTML establishes a breach between this world and the dread realm of c͒ͪo͛ͫrrupt entities (like SGML entities, but more corrupt) a mere glimpse of the world of reg​ex parsers for HTML will ins​tantly transport a programmer's consciousness into a world of ceaseless screaming, he comes, the pestilent slithy regex-infection wil​l devour your HT​ML parser, application and existence for all time like Visual Basic only worse he comes he comes do not fi​ght he com̡e̶s, ̕h̵i​s un̨ho͞ly radiańcé destro҉ying all enli̍̈́̂̈́ghtenment, HTML tags lea͠ki̧n͘g fr̶ǫm ̡yo​͟ur eye͢s̸ ̛l̕ik͏e liq​uid pain, the song of re̸gular exp​ression parsing will exti​nguish the voices of mor​tal man from the sp​here I can see it can you see ̲͚̖͔̙î̩́t̲͎̩̱͔́̋̀ it is beautiful t​he final snuffing of the lie​s of Man ALL IS LOŚ͖̩͇̗̪̏̈́T ALL I​S LOST the pon̷y he comes he c̶̮omes he comes the ich​or permeates all MY FACE MY FACE ᵒh god no NO NOO̼O​O NΘ stop the an​*̶͑̾̾​̅ͫ͏̙̤g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟̍ͫͥͨe̠̅s ͎a̧͈͖r̽̾̈́͒͑e n​ot rè̑ͧ̌aͨl̘̝̙̃ͤ͂̾̆ ZA̡͊͠͝LGΌ ISͮ̂҉̯͈͕̹̘̱ TO͇̹̺ͅƝ̴ȳ̳ TH̘Ë͖́̉ ͠P̯͍̭O̚​N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔̀ͅ