on 2003-10-10 James Edward Gray II said: >Keep your replies on the list, so you can get help from all the people >smarter than me. ;)
If there are people smarter than you out there I must be an amoeba ;) >Okay, why put this inside an if block. If it doesn't find a match it >will fail and do nothing, which is what you want, right? I don't think >you need the if. Good point. >Why don't we work on your Regular Expression a little and see if we can >do it all in one move. We want to find all occurrences of the keyword, >as long as they're not on a line beginning with qz, right? This seems >to do that for me: > >$content =~ s/^([^\n]*)($kw)/substr($1, 0, 2) ne 'qz' ? "$1\n$2\n" : >"$1$2"/mge; > Ok. I had to stop to pick myself up off the floor then. WOW. This has actually made it possible to cut the whole thing down massively. here's the code now: _________________________ # get line breaks to make <br>'s at the end $content =~ s/\n/-qbr-/g; # find markup and add markers so it doesn't get processed by regex, # no keyword links to be made inside other tags $content =~ s/(\[(img|page|link|mp3)=.*?\])/\nqz$1\n/g; # find HTML so it doesn't get processed by regex, # no keyword links to be made inside valid HTML $content =~ s/(<.*?>)/\nqz$1\n/g; for my $href ( @Keywords ) { # get each keyword and llok for it in content. for $kw ( keys %$href ) { if ($content =~ /\b($kw)\b/g) { # do the very clever reg with help from and thanks to # [EMAIL PROTECTED] $content =~ s/^([^\n]*)($kw)/substr($1, 0, 2) ne 'qz' ? "$1\nqz[link=\"$href->{$kw}\" title=\"$2\"]\n" : "$1$2"/mge; } } } # clean up those line breaks and markers; $content =~ s/\n(qz)?//g; # put in <br>'s $content =~ s/-qbr-/<br>\n/g; print $content; _________________________ As you can see I've adapted your regex a little to put in the full markup around the keyword. The regex itself made perfect sense, it was the "" ? "" : "" bit that I've never seen before. That's really useful. I assume it means "if statement" ? "do if true" : "do if false" Please do correct me if I'm wrong. What do you call that? I think I'm going it be using that quite a bit ;) do I even need the if false bit in this case? >I used the /e modifier for the replacement, which allows me to use Perl >code in there. It's pretty simple. If the line didn't start with a >qz, we do a normal replace. That's going in my BBEdit gold dust code snippets glossary. >Let me know if that will work for you. It did, perfectly. Thank you soooooo much, >Your right about it being inefficient, of course. It was easier to >read than my Regex though, eh? <laughs> Are you implying that regex isn't easy to read ;) >The first choice may be slow, >but on modern computers they may both work in the blink of an eye. >Save worrying about speed for when you need to and try and keep your >life as a programmer as easy as possible until then. Sadly then is now. That's why I joined up to this list today ;) This code will be run on every single page of a website, in one go. So it needs to be as efficient as physically possible. The site will only be a few hundred pages, and not all pages will always be processed. It's a system that makes it's own links and maintains them, so eveytime a page's keywords change this has to be done to all pages that contain that keyword. I know this is not a task for the beginner, but this is actually version 3 of the code. my old programming language started to show it's dislike for regex. >> If you have any suggestions I would be most grateful to hear them. > >Those are my best shots. Hope they help. They did, thank you so much. Angie -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]