That is really cool. You don't even have to program if you know your
regexs. The trick is mastering regexs.
thanks Mike!
Jay
----- Original Message -----
From: "Mike Simons" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, September 14, 2001 5:54 PM
Subject: Re: [vox-tech] Looking for 2 cool regexs
> # foreach $chunk (m/\G(.{1,$length})\s+/gso) { # get chunks
>
> \G == begin where the last \g left off.
> (.{1,$length}) == capture between 1 and X characters.
> \s+ == get one or more whitespace characters
> /gso == /g -- do this as many times as it works
> /s -- pretend the string is all one line (allow '.' to match \n)
> /o -- compile the regex once, so that things run much faster.
>
> ... note the thing that replaces newlines with space doesn't need to be
> run... so the /s is in the provided re... striping newlines was just so
> that printout looks easier to read.
>
> TTFN,
> Mike
>
>
> msimons@fizban:~> cat test.pl
> #! /usr/bin/perl -w
>
> $length = 40; # length of data
> $_ = `fortune`; # get some random string
>
> print $_, "=" x $length, "\n"; # print for debugging
> s/\n/ /g; # strip newlines to make printing
nicer
> foreach $chunk (m/\G(.{1,$length})\s+/gso) { # get chunks
> printf "%3d: %2d, \"%s\"\n", $i++, length($chunk), $chunk;
> }
>
> exit 0;
> ====
>
>
> msimons@fizban:~> ./test.pl
> The health of a democratic society may be measured by the quality
> of functions performed by private citizens.
> -- Alexis de Tocqueville
> ========================================
> 0: 38, "The health of a democratic society may"
> 1: 39, "be measured by the quality of functions"
> 2: 35, "performed by private citizens. --"
> 3: 21, "Alexis de Tocqueville"
> ====
>
>
> msimons@fizban:~> ./test.pl
> Everybody knows that the dice are loaded. Everybody rolls with their
> fingers crossed. Everybody knows the war is over. Everybody knows the
> good guys lost. Everybody knows the fight was fixed: the poor stay
> poor, the rich get rich. That's how it goes. Everybody knows.
>
> Everybody knows that the boat is leaking. Everybody knows the captain
> lied. Everybody got this broken feeling like their father or their dog
> just died.
>
> Everybody talking to their pockets. Everybody wants a box of chocolates
> and long stem rose. Everybody knows.
>
> Everybody knows that you love me, baby. Everybody knows that you really
> do. Everybody knows that you've been faithful, give or take a night or
> two. Everybody knows you've been discreet, but there were so many people
> you just had to meet without your clothes. And everybody knows.
>
> And everybody knows it's now or never. Everybody knows that it's me or
you.
> And everybody knows that you live forever when you've done a line or two.
> Everybody knows the deal is rotten: Old Black Joe's still pickin' cotton
> for you ribbons and bows. And everybody knows.
> -- Leonard Cohen, "Everybody Knows"
> ========================================
> 0: 33, "Everybody knows that the dice are"
> 1: 35, "loaded. Everybody rolls with their"
> 2: 37, "fingers crossed. Everybody knows the"
> 3: 38, "war is over. Everybody knows the good"
> 4: 37, "guys lost. Everybody knows the fight"
> 5: 39, "was fixed: the poor stay poor, the rich"
> 6: 31, "get rich. That's how it goes. "
> 7: 38, "Everybody knows. Everybody knows that"
> 8: 37, "the boat is leaking. Everybody knows"
> 9: 37, "the captain lied. Everybody got this"
> 10: 35, "broken feeling like their father or"
> 11: 39, "their dog just died. Everybody talking"
> 12: 40, "to their pockets. Everybody wants a box"
> 13: 34, "of chocolates and long stem rose. "
> 14: 38, "Everybody knows. Everybody knows that"
> 15: 40, "you love me, baby. Everybody knows that"
> 16: 36, "you really do. Everybody knows that"
> 17: 36, "you've been faithful, give or take a"
> 18: 37, "night or two. Everybody knows you've"
> 19: 37, "been discreet, but there were so many"
> 20: 40, "people you just had to meet without your"
> 21: 35, "clothes. And everybody knows. And"
> 22: 35, "everybody knows it's now or never. "
> 23: 40, "Everybody knows that it's me or you. And"
> 24: 37, "everybody knows that you live forever"
> 25: 31, "when you've done a line or two."
> 26: 39, "Everybody knows the deal is rotten: Old"
> 27: 40, "Black Joe's still pickin' cotton for you"
> 28: 40, "ribbons and bows. And everybody knows. "
> 29: 35, "-- Leonard Cohen, "Everybody Knows""
> ====
>
> On Fri, Sep 14, 2001 at 09:57:42AM -0500, Jay Strauss wrote:
> > Ok, I've got another:
> >
> > I have a really long string (2000ish chars), I want to break it into
> > multiple strings of 80 chars or less.
> > The Catch is, I need to break it on a space (' '), hence the "or less".
It
> > seems, I should be able to
> > use a regex on this.
> >
> > Currently I do it like:
> >
> > $lineLength = 80;
> > $line = #some really long string#;
> >
> > # essentially while the line is longer than 80 chars
> > # find the right most ' ' or ',' up to a maximum of 80 chars
> > # from the beginning
> > # break off that piece of the string and start over
> > while (length($line) > $lineLength) {
> > my $space = rindex(substr($line,0,$lineLength),' ') ||
> > rindex(substr($line,0,$lineLength),',');
> > print substr($line,0,$space)."\n";
> > substr($line,0,$space) = '';
> > }
> > print "$line\;\n";
> >
> > Seems like I should be able to do it (somehow) with a regex sorta like
> >
> > foreach ($line =~ m/(" ")/g) { # but somehow specify a length
> > print $_;
> > }
> >
> > Any ideas?
> > Thanks
> > Jay
> >
> >
> > ----- Original Message -----
> > From: "Ted Deppner" <[EMAIL PROTECTED]>
> > To: <[EMAIL PROTECTED]>
> > Sent: Friday, September 14, 2001 3:36 AM
> > Subject: Re: [vox-tech] Looking for 2 cool regexs
> >
> >
> > > On Thu, Sep 13, 2001 at 11:05:48AM -0500, Jay Strauss wrote:
> > > > find any CREATEwhitespaceTABLEanycharsnot; and replace them with ''.
> > the
> > > > whole lot of it has to start at a word boundary.
> > >
> > > right on...
> > >
> > > > I've never done this before, I didn't know you could produce a list
> > from a
> > > > match command.
> > >
> > > It's nifty... the concept is an expansion on
> > > ($a,$b,$c) = $var =~ m/(re1)(re2)(re3)/
> > > (where $1,$2,$3 are returned in a list context)
> > >
> > > --
> > > Ted Deppner
> > > http://www.psyber.com/~ted/
> >
> >
> > _________________________________________________________
> > Do You Yahoo!?
> > Get your free @yahoo.com address at http://mail.yahoo.com
_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com