in reply to Multiple conditions

I am struggling with regular expressions. I know the fundamentals..

/>(.+) and (^\w+)</

Apparently not. Are the characters 'a', 'n', and 'd' special regex characters? If not, what do those characters match when inside a regular expression?

use strict; use warnings; use 5.010; my @strings = ( 'hello', 'hello >knowled<ge< goodbye', 'hello >knowledge< goodbye', 'hello >!knowledge< goodbye', ); for (@strings) { if ( />(.+)</ ) { my $word = $1; if ( $word =~ /^\w[^><]*$/ ) { say $word; } } } --output:-- knowledge

None of the solutions posted so far will yield the same results.

You could write:

if ( />(.+)/ and /(^\w+)</ ) { #...do something }

But those regexes don't fully express the match you are looking for.

Replies are listed 'Best First'.
Re^2: Multiple conditions
by Erosia (Novice) on Mar 14, 2010 at 12:46 UTC
    Apparently not. Every man can make mistakes.
    use strict; use warnings; use 5.010; my @strings = ( 'hello', 'hello >knowled<ge< goodbye', 'hello >knowledge< goodbye', 'hello >!knowledge< goodbye', ); for (@strings) { if ( />(.+)</ ) { my $word = $1; if ( $word =~ /^\w[^><]*$/ ) { say $word; } } }
    ...seems fine. But I am actually reading from a corpus. So the whole program looks like this (with ikegami's suggestion):
    use warnings; open FILE, "parole.sgm" or die "Couldn't open file."; while (<FILE>) { print "$_ " for />([^<>]+)</g }; close FILE;
    So, can you rephrase your arrays solution to fit my filehandle program?

    Furthermore, ikegami almost fixed my little program with the exception that all commas, periods etc. have a space on each side instead of only having one at the end as it should be. Is that doable?