0
votes

I'm parsing plaintext emails and once I have the body text, I'd like to trim it down to the first paragraph.

Is this a regex situation (I guess searching from the start until \n or \r) or is this built into PHP more succinctly?

And example of the text might be:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dignissim, lacus ac ultricies convallis, arcu ante sodales magna, et ultrices felis velit facilisis erat. Nam ullamcorper sagittis rhoncus. Proin lacinia lorem in dolor condimentum, nec pretium orci interdum. Morbi mattis, velit vel dictum efficitur, dolor nisi ullamcorper mi, eu imperdiet risus metus ut ipsum. Pellentesque sagittis ultrices velit, at maximus mauris venenatis in. Aenean et nisi efficitur, tincidunt sapien sed, consequat quam. Cras ornare varius justo sed pulvinar.

Praesent magna odio, posuere a convallis et, viverra id augue. Pellentesque auctor, nibh nec ornare porttitor, dolor dolor lobortis justo, ut mollis tortor est eget diam. Morbi congue, massa sit amet consequat convallis, purus magna tempus nibh, vitae vehicula dui neque sollicitudin lorem. Etiam imperdiet maximus odio, in iaculis dolor cursus ac. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed feugiat efficitur odio vel lobortis. Mauris pretium rhoncus velit, eu elementum nisl imperdiet vitae. Morbi quis elit sed enim egestas aliquam. Suspendisse facilisis ante id ipsum hendrerit, eget tincidunt arcu ullamcorper. Nullam pellentesque efficitur nulla fermentum blandit. Mauris et felis ornare, scelerisque velit eu, lobortis magna. Aliquam id egestas ante, vitae ultrices dui. Integer tempus velit et ipsum sollicitudin ultricies. Ut dignissim rutrum purus, at ultricies quam facilisis at. Duis ultricies mauris ut urna pretium sollicitudin. Sed ut sollicitudin sem.

Curabitur sed mattis metus, id hendrerit purus. Ut sollicitudin tellus at mi pellentesque iaculis. Nunc eu faucibus turpis. Duis leo elit, ornare vel urna in, volutpat malesuada ante. Sed at diam nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris a nunc eros. Mauris sed diam a purus iaculis tincidunt ut quis sapien. In at turpis est. Donec mattis magna mauris, id dapibus turpis hendrerit bibendum. Duis dapibus ante lobortis odio efficitur porta. Morbi vitae risus mi. Integer volutpat lacinia dui, non gravida massa egestas a.

And I'd want to save the first paragraph of that, however long it may be.

3
post the input textRomanPerekhrest
It would be nice to know a little more about your input. Is it plain text? Maybe string.explode("\n") is what you look for, depending on your case.GxTruth
@RomanPerekhrest I've updated my original questionSebastian

3 Answers

1
votes

You should use explode function, as @maio290 said. You can do it like this :

$first = explode( "\n" , $yourString);
echo $first[0];

Here is a working example.

2
votes

Take a look at explode:

array explode ( string $delimiter , string $string [, int $limit = PHP_INT_MAX ] )

Returns an array of strings, each of which is a substring of string formed by splitting it on boundaries formed by the string delimiter.

0
votes

Is this a regex situation (I guess searching from the start until \n or \r) or is this built into PHP more succinctly?

Yes and no.

If you are sure of the newline sequence, you can use explode ideally with the limit parameter set to 2 for your case.

One of the advantage of regex in this situation is the \R alias that stands for several newline sequences at the same time. This way you can use it without to know what kind of newline sequence is used in your string:

if ( preg_match('~(\S.*?\R)\R~s', $text, $m) )
    $text = $m[1];

But it isn't the only way to do it, It's also possible to read your string as a stream with fgets in conjunction with the option auto_detect_line_endings set to true

ini_set("auto_detect_line_endings", true);

$handle = fopen("data:text/plain,$text", 'r');

$result = '';

while ( false !== $line = fgets($handle, 1024) ) {
    if ( empty(trim($line)) )
        break;

    $result .= $line;
}