PHP preg_split添加了一个空数组键,可以';由于存在';s a';空间';在里面
我试图使用PHP preg_split添加了一个空数组键,可以';由于存在';s a';空间';在里面,php,regex,Php,Regex,我试图使用preg_split分割段落之间新行数为奇数的文本,但其中一些新行(也是奇数)上也有一些“空格”(空白),但我使用的正则表达式无法绕过这些“空格”,而是将它们包含在我的数组中: Array ( [0] => Dummy text [2] => [3] => more dummy text after some lines [5] => [7] => even more dummy text ) 下面是正则
preg_split
分割段落之间新行数为奇数的文本,但其中一些新行(也是奇数)上也有一些“空格”(空白),但我使用的正则表达式无法绕过这些“空格”,而是将它们包含在我的数组中:
Array
(
[0] => Dummy text
[2] =>
[3] => more dummy text after some lines
[5] =>
[7] => even more dummy text
)
下面是正则表达式示例:
到目前为止,我已经使用了一个foreach
循环来清理它:
foreach($arr as $v){
if(!empty($v){
//do something
}
}
但是我很确定有一个更好的方法来解决这个问题:-s使用
PREG\u SPLIT\u NO\u EMPTY
标志
$p ='
foo
bar
biz
';
print_r(preg_split('/(\r\n|\n|\r)/', $p, 0, PREG_SPLIT_NO_EMPTY));
输出:
Array
(
[0] => foo
[1] => bar
[2] => biz
)
Array (
[0] => Dummy text
[1] => more dummy text after some lines
[2] => even more dummy text
)
供参考
PREG\u SPLIT\u NO\u EMPTY
如果设置了此标志,preg_split()将只返回非空工件
作为奖金
像这样的正则表达式满足您的需要。因为\r
在里面,\r\n
也在里面,\n
也在里面(大惊喜吧)。您可能会想“在windows上,它是\r\n的,不会被拆分为2x”。当然会,但这并不重要,因为并没有空的标志
即使这让您担心,您也可以在末尾添加一个+
,如'/[\r\n]+/'
,因此:-p,现在我想到它,它可能更“快”,但我跑题了
另外,如果您将最后一个标记与+
一起使用,则您甚至不需要该标记(如果您将其修剪)。所以有两个答案
简单 使用
PREG\u SPLIT\u NO\u EMPTY
标志
$p ='
foo
bar
biz
';
print_r(preg_split('/(\r\n|\n|\r)/', $p, 0, PREG_SPLIT_NO_EMPTY));
输出:
Array
(
[0] => foo
[1] => bar
[2] => biz
)
Array (
[0] => Dummy text
[1] => more dummy text after some lines
[2] => even more dummy text
)
供参考
PREG\u SPLIT\u NO\u EMPTY
如果设置了此标志,preg_split()将只返回非空工件
作为奖金
像这样的正则表达式满足您的需要。因为\r
在里面,\r\n
也在里面,\n
也在里面(大惊喜吧)。您可能会想“在windows上,它是\r\n的,不会被拆分为2x”。当然会,但这并不重要,因为并没有空的标志
即使这让您担心,您也可以在末尾添加一个+
,如'/[\r\n]+/'
,因此:-p,现在我想到它,它可能更“快”,但我跑题了
另外,如果您将最后一个标记与+
一起使用,则您甚至不需要该标记(如果您将其修剪)。所以有两个答案
简单 您可以使用PREG_SPLIT_NO_EMPTY
标志从输出中删除完全空的值,但是您还需要在正则表达式中包含新行附近的空格,以避免在输出中获得仅包含空格的行。这将起作用($p
是从您的演示中复制的):
输出:
Array
(
[0] => foo
[1] => bar
[2] => biz
)
Array (
[0] => Dummy text
[1] => more dummy text after some lines
[2] => even more dummy text
)
您可以使用PREG\u SPLIT\u NO\u EMPTY
标志从输出中删除完全为空的值,但您还需要在正则表达式中包含新行附近的空格,以避免在输出中获得仅包含空格的行。这将起作用($p
是从您的演示中复制的):
输出:
Array
(
[0] => foo
[1] => bar
[2] => biz
)
Array (
[0] => Dummy text
[1] => more dummy text after some lines
[2] => even more dummy text
)
嘿@Nick,非常感谢你花时间回答!别担心。很高兴我能帮忙。嘿@Nick,非常感谢你花时间回答!别担心。很高兴我能帮上忙。嘿@ArtisticPhoenix,谢谢你花时间来帮助我,尽管我使用了之前的答案,因为答案很接近。谢谢!X_XHey@ArtisticPhoenix,感谢您花时间帮助我,尽管我使用了之前的答案,因为答案很接近X_X谢谢您!X_X