使用换行符分割字符串

4

我想使用explode函数将一个字符串拆分成数组。

我希望用字符串内找到的换行符来拆分它。

我查了一下资料,试过各种方法,但都不能让它正常工作。

以下是我目前的代码:

$r = explode("\r\n" , $roster[0]);

但是当我使用var_dump函数来输出变量时,会得到以下结果:
array (size=1)
  0 => string '\r\n                         ( G  A  Sh Hi Ga Ta PIM, +\/-  Icetime Rating)\r\nR Danny Kristo            1  0  2  0  0  0    0    1    7.00    7\r\nR Brian Gionta            1  1  5  1  1  0    0    0   19.20    8\r\nR Steve Quailer...

有什么想法吗?

2
不,实际上正好相反。 - raina77ow
3个回答

15

您可以尝试使用正则表达式将字符串拆分。有一个专门用于换行符的类:

$r = preg_split('/\R/', $string);

编辑: 在正则表达式中添加缺失的定界符,并将参数添加到函数中。


我尝试了一下,得到了这个结果:preg_split():定界符不能是字母数字或反斜杠。 - Ara Sivaneswaran
我已经更正了正则表达式。你应该知道,这个表达式只能识别“真正”的换行符。就像raina77ow所说的那样,你字符串中的'\r\n'不是换行符,而是四个单独的字符。因此,这个正则表达式将无法匹配。 - Lucas Kahlert

6
您可以使用与系统相关的EOL。
 $r = explode(PHP_EOL, $roster[0]);

这是唯一对我有效的解决方案。谢谢 :) - MA19112001

6
问题在于原始文本中的\r\n不是行尾符号 - 它只是一个字面上的'反斜杠-r-反斜杠-n'序列。因此,您需要考虑到这一点:
$r = explode('\r\n', $roster[0]);

...即,使用单引号包围字符串。


谢谢,到处都说我应该用双引号而不是单引号...谢谢! - Ara Sivaneswaran
1
更好的做法是使用PHP_EOL来实现跨平台的解决方案。 - Fr0zenFyr
1
@Fr0zenFyr,你误解了重点,标题有误导性。OP拥有带有斜杠的字符串,后面跟着rn,而不是EOL符号。如果是这样的话,@LucasKahlert的答案最合适,因为\R元字符涵盖了所有基础知识。 - raina77ow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接