Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Re^3: Perl & regex help

by smls (Friar)
on Jan 30, 2013 at 23:53 UTC ( #1016184=note: print w/replies, xml ) Need Help??

in reply to Re^2: Perl & regex help
in thread Perl & regex help

That won't just exclude HTML entities from being matched, it will exclude any & character that is in the same line as a semicolon somewhere to the right of it, because .+? also matches whitespace.

Instead, you should match for HTML/XML entities specifically. There are three forms that they can take, and the corresponding regexes for matching them would be:

  /&#[0-9]+;/ - character referenced by decimal number

  /&#x[0-9a-f]+;/i - character referenced by hexadecimal number

  /&[a-z]+;/i - character referenced by name

Putting it together, you get this regex for matching an HTML entity:

Although that's kinda messy and pedantic, and you can probably get away with using this simplified version:
(Unlike the more pedantic version, it would match some false positives such as &#amp; or &1a2b3c;, but what are the chances such constructs will appear in the input document?)

To do what the OP requested, wrap everything after the & in a negative look-ahead bracket like choroba suggested:

# 10 20 30 40 50 # ---------'---------'---------'---------'---------'---- my $str = "& ... & ... & ... &no_entity; ... & ... ;"; while ($str =~ /&(?!#?[0-9a-z]+;)/gi) { print "Found ampersand at position ".pos($str)."\n"; }


Found ampersand at position 32 Found ampersand at position 48

(i.e. it only matches the last two & characters in $str)

Replies are listed 'Best First'.
Re^4: Perl & regex help
by Kenosis (Priest) on Jan 31, 2013 at 00:06 UTC

    I think your regex is the best, as it clearly aligns with the ISO specs. Nice work.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1016184]
[1nickt]: the tick that can make you a vegetarian
[perldigious]: Your Mother: Yeah, I have a tool for ticks that I use (mostly on my dogs thankfully), but it's just a cheapo one I got from my vets office... it works pretty good though.
erix saw a tick in a natural history museum collected from the scrotum of the curator (it was removed)
[Your Mother]: The exhibit, the tick, or the scrotum?
[erix]: (the man is even a paleontologist )
[1nickt]: erix unfortunately that's there favourite spot. That's why they are usually spotted crawling *up* your leg.
[erix]: ha, the tick and, as it happens, also the curator (now a professor of Paleont.)
[1nickt]: s/there/their/, ugh sorry.
[Your Mother]: Heh. The only one I ever had on me, I caught on my shin, headed north.
erix looks nervously I got away cleanly from my run , it seems :)

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (12)
As of 2017-05-24 13:14 GMT
Find Nodes?
    Voting Booth?