Solved

Truncate text by words

Posted on 2001-08-09
8
269 Views
Last Modified: 2008-03-10
I posted this question and got an acceptable answer. I then noticed that the solution produced no results when the sample contained few words than the amount sought in the truncation.

I am trying to truncate a text field by a certain number of words. The truncation needs to be word boundries. Here is the solution I got:

$pat = '~^(\S+\s+(?=\S)){4}~' ;
$sub = "hello, foo-bar!\nbaz quux whatever" ;
preg_match($pat, $sub, $match = array());
echo "'", trim(array_shift($match)), "'\n";

If the sample has more words than the number in the pattern (4 in this case) then this works beautifully. If the sample is shorter, it return nothing and I would like for it to return the original sample. I hope this makes sense.

Thanks for all your help.

0
Comment
Question by:td234
  • 4
  • 2
  • 2
8 Comments
 
LVL 4

Expert Comment

by:ykf2000
ID: 6370854
try this


$pat = '~^(\S+\s+(?=\S)){4}~' ;
$sub = "hello, foo-bar!\nbaz quux whatever" ;
if(strlen($sub) > 4)
{
  preg_match($pat, $sub, $match = array());
  $result =  "'", trim(array_shift($match)), "'\n";
}
else
{
  $result = $sub;
}

echo $result;
0
 
LVL 2

Author Comment

by:td234
ID: 6372465
Thanks ykf2000, but your solutions counts the characters, not the words. Your statement would return true because of the first 4 characters in "hello" and I need to know if it has 4 words or less.
0
 
LVL 4

Expert Comment

by:ykf2000
ID: 6372657
what about this:

$pat = '~^(\S+\s+(?=\S)){4}~' ;
$sub = "hello, foo-bar!\nbaz quux whatever" ;
preg_match($pat, $sub, $match = array());
if(strlen(trim(array_shift($match))) > 0)
{
 $result =  "'", trim(array_shift($match)), "'\n";
}
else
{
 $result = $sub;
}

echo $result;
0
Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

 
LVL 2

Author Comment

by:td234
ID: 6373393
This did not work as is, but was close. AS written, this returned the X (4th) word when the IF statement was true. I had to repeat the preg_match before the first result.
0
 

Expert Comment

by:netapi
ID: 6382238
0
 
LVL 2

Author Comment

by:td234
ID: 6384160
I am sure there is a cleaner way to do this than my modification to the above recomendation which has two regex's. Are there any regex experts out there with a solution?
0
 

Accepted Solution

by:
netapi earned 50 total points
ID: 6384879
Hmmm, I tried to post something before but it just says 'no text'... strange...

Anyway, I figured you could use {0,4} instead of {4} in your regular expression... that way you match at least 0 times, and at most 4 times, and that's what you want, right?

Maybe there's an easier solution using the 'split'-function, and a for-loop to show the first 4 elements of the resulting array, anybody care to comment on that?

Ciao,

netapi
0
 
LVL 2

Author Comment

by:td234
ID: 6384949
YES! That is the answer I was looking for. Thank you very much.
0

Featured Post

Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Developers of all skill levels should learn to use current best practices when developing websites. However many developers, new and old, fall into the trap of using deprecated features because this is what so many tutorials and books tell them to u…
Introduction This article is intended for those who are new to PHP error handling (https://www.experts-exchange.com/articles/11769/And-by-the-way-I-am-New-to-PHP.html).  It addresses one of the most common problems that plague beginning PHP develop…
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question