0

所以基本上我很难处理一个非常大的字符串,我只想保存它的前 4 个单词。

尽管有些情况会破坏它,但我几乎可以正常工作。

这是我当前的代码:

$title = "blah blah blah, long paragraph goes here";
//Make title only have first 4 words
$pieces = explode(" ", $title);
$first_part = implode(" ", array_splice($pieces, 0, 4));
$title = $first_part;
//title now has first 4 words

打破它的主要情况是line-breaks。如果我有这样的段落:

Testing one two three
Testing2 a little more three two one

$title等于Testing one two three Testing2

另一个例子:

Testing
test1
test2
test3
test4
test5
test6
sdfgasfgasfg fdgadfgafg fg

标题等于=Testing test1 test2 test3 test4 test5 test6 sdfgasfgasfg fdgadfgafg fg

出于某种原因,它抓住了下一行 aswel 的第一个单词。

有没有人对如何解决这个问题有任何建议?

4

3 回答 3

1

试试这个:

function first4words($s) {
    return preg_replace('/((\w+\W*){4}(\w+))(.*)/', '${1}', $s);    
}

https://stackoverflow.com/a/965343/2701758

于 2013-09-20T00:31:41.750 回答
1

这可能有点老套,但我会尝试只使用 str_replace() 来摆脱任何换行符。

$titleStripped = str_replace('\n', ' ', $title);
$pieces - explode(' ', $title);

不过取决于您的应用程序和预期数据。如果您期望的不仅仅是换行符,请使用 preg_replace。无论哪种方式,在爆炸之前准备好数据。

于 2013-09-20T00:33:45.813 回答
0

试试这个(未经测试的代码):

//--- remove linefeeds
$titleStripped = str_replace('\n', ' ', $title);
//--- strip out multiple space caused by above line
preg_replace('/ {2,}/g',$titleStripped );
//--- make it an array
$pieces = explode( ' ', $titleStripped );
//--- get the first 4 words
$first_part = implode(" ", array_splice($pieces, 0, 4));
于 2013-09-20T00:59:32.580 回答