Πρέπει να ταιριάξω όλες αυτές τις ετικέτες ανοίγματος:
<p>
<a href="foo">
Αλλά όχι αυτά:
<br />
<hr class="foo" />
Σκέφτηκα αυτό και ήθελα να βεβαιωθώ ότι το έχω καταλάβει σωστά. Καταγράφω μόνο το "α-ζ".
<([a-z]+) *[^/]*?>
Νομίζω ότι λέει:
/
, τότεΤο έχω καταλάβει αυτό σωστά; Και το πιο σημαντικό, τι νομίζετε;
Δεν μπορείτε να αναλύσετε την [X]HTML με regex. Επειδή η HTML δεν μπορεί να αναλυθεί με regex. Η Regex δεν είναι ένα εργαλείο που μπορεί να χρησιμοποιηθεί για τη σωστή ανάλυση της HTML. Όπως έχω απαντήσει σε ερωτήσεις HTML και regex εδώ τόσες φορές στο παρελθόν, η χρήση της regex δεν θα σας επιτρέψει να καταναλώσετε HTML. Οι κανονικές εκφράσεις είναι ένα εργαλείο που δεν είναι επαρκώς εξελιγμένο για την κατανόηση των δομών που χρησιμοποιεί η HTML. Η HTML δεν είναι μια κανονική γλώσσα και ως εκ τούτου δεν μπορεί να αναλυθεί με κανονικές εκφράσεις. Τα ερωτήματα Regex δεν είναι εξοπλισμένα για να αναλύσουν την HTML στα ουσιαστικά της μέρη. τόσες φορές αλλά δεν μου βγαίνει. Ακόμη και οι βελτιωμένες ακανόνιστες κανονικές εκφράσεις όπως χρησιμοποιούνται από την Perl δεν είναι ικανές να αναλύσουν την HTML. Ποτέ δεν θα με κάνετε να σπάσω. Η HTML είναι μια γλώσσα επαρκούς πολυπλοκότητας που δεν μπορεί να αναλυθεί με κανονικές εκφράσεις. Ακόμα και ο Jon Skeet δεν μπορεί να αναλύσει την HTML χρησιμοποιώντας κανονικές εκφράσεις. Κάθε φορά που προσπαθείτε να αναλύσετε την HTML με κανονικές εκφράσεις, το ανίερο παιδί κλαίει το αίμα των παρθένων και οι Ρώσοι χάκερς κάνουν pwn την εφαρμογή σας. Η ανάλυση της HTML με regex καλεί μολυσμένες ψυχές στο βασίλειο των ζωντανών. Η HTML και η regex πάνε μαζί όπως ο έρωτας, ο γάμος και η τελετουργική παιδοκτονία. Το
inal snuf
fing of το ψέμαs του ανθρώπου ΟΛΑ ΕΙΝΑΙ LOŚ͖̩͇̗̪̏̈́T A<b>,LL IS LOST the pon̷y he comes he c̶̮om ͎a̧͈͖r̽̾̈́͒͑e</code>, not rè̑ͧ̌aͨl̘̝̙̃ͤ͂̾̆ ZA̡͊͠͝LGΌ ISͮ̂҉̯͈͕̹̘̱ TO͇̹̺ͅƝ̴ȳ̳ TH̘Ë͖́̉ ͠P̯͍̭O̚N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔̀ͅ
Έχετε δοκιμάσει να χρησιμοποιήσετε αντί αυτού έναν αναλυτή XML;
Σημείωση Συντονιστή
Αυτή η ανάρτηση είναι κλειδωμένη για να αποτρέψει ακατάλληλες επεξεργασίες στο περιεχόμενό της. Η ανάρτηση φαίνεται ακριβώς όπως πρέπει να φαίνεται - δεν υπάρχουν προβλήματα με το περιεχόμενό της. Παρακαλούμε να μην την επισημάνετε για την προσοχή μας.
Δοκιμάστε:
<([^\s]+)(\s[^>]*?)?(?<!/)>
Είναι παρόμοιο με το δικό σας, αλλά το τελευταίο >
δεν πρέπει να είναι μετά από μια κάθετο, και δέχεται επίσης h1
.
Θέλετε το πρώτο >
να μην προηγείται από ένα /
. Κοιτάξτε εδώ για λεπτομέρειες σχετικά με το πώς να το κάνετε αυτό. Αναφέρεται ως αρνητικό lookbehind.
Ωστόσο, μια naïve εφαρμογή αυτού θα καταλήξει να ταιριάζει με το <bar/></foo>
σε αυτό το έγγραφο του παραδείγματος
<foo><bar/></foo>
Μπορείτε να δώσετε λίγες περισσότερες πληροφορίες σχετικά με το πρόβλημα που προσπαθείτε να λύσετε; Επαναλαμβάνετε τις ετικέτες προγραμματιστικά;