Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

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]
hippo looks sideways at LiposuctionAnnCure
[Veltro]: I don't understand. I keep getting "your connection is not secure" on https://perlmonks. org. The behaviour is totally random. Then it is insecure and then it is secure again...
[marto]: Re: Monastery login over http

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (8)
As of 2018-05-23 11:17 GMT
Find Nodes?
    Voting Booth?