php preg split,关于php:preg_split-按空格和所选字符分隔,但将字符保留在数组中...

所以我有这个问题,我想用包含空格()和逗号(,)的模式分割字符串。 我设法按该模式拆分字符串,但问题是我想将该逗号保留在数组中。 这是我的字符串:

$string ="It's just me, myself, i and an empty glass of wine. Age = 21";

这是我如何拆分它:

$split = preg_split('/[\\s,]+/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);

这是我在此示例中获得的数组(如您所见,逗号消失了)

这是我现在拥有的一个:

Array

(

[0] => It's

[1] => just

[2] => me

[3] => myself

[4] => i

[5] => and

[6] => an

[7] => empty

[8] => glass

[9] => of

[10] => wine.

[11] => Age

[12] => =

[13] => 21

)

这是我想要的:

Array

(

[0] => It's

[1] => just

[2] => me

[3] => ,

[4] => myself

[5] => ,

[6] => i

[7] => and

[8] => an

[9] => empty

[10] => glass

[11] => of

[12] => wine.

[13] => Age

[14] => =

[15] => 21

)

如果在该逗号之前有一个空格并且该逗号不在该模式中,那么我会将其放入由preg_split生成的数组中,但是问题是我希望它在该逗号之前有或没有空格。

有没有办法做到这一点?

谢谢! :D

使用标志PREG_SPLIT_DELIM_CAPTURE php.net/manual/en/function.preg-split.php

space-comma应该在分割的末尾还是开始?

您的拆分用于一个或多个逗号或空格。 需要逗号吗? 也许您只是想忽略空格前的字符? 3v4l.org/H8pTd

该逗号是必需的,并且该逗号应位于:D(如果逗号之前数组中的键为[3],则逗号必须位于[4]-我希望这是有意义的:D)

$string应该变成3部分吗?

字符串应该变成一个数组,如下所示:Array ( [0] => Its [1] => just [2] => me [3] => myself [4] => i [5] => and [6] => an [7] => empty [8] => glass [9] => of [10] => wine. [11] => Age [12] => = [13] => 21 ),但是正如您所看到的,从这里开始,那些逗号丢失了:(

@emma请添加一个数组,以显示正确的数组外观。 索引2应该是me,吗?

我已经编辑过Hei @ chris85,并添加了一个示例-感谢您的宝贵时间,我在下面给出了答案! :D

the problem is that i want to keep that comma in array

然后只需使用标志PREG_SPLIT_DELIM_CAPTURE

PREG_SPLIT_DELIM_CAPTURE

If this flag is set, parenthesized expression in the delimiter pattern will be captured and returned as well.

http://php.net/manual/zh/function.preg-split.php

所以你会这样分割

$split = preg_split('/(,)\\s|\\s/', $string, null, PREG_SPLIT_DELIM_CAPTURE);

你可以在这里测试

https://3v4l.org/Eq8uS

对于Limit参数,null比-1更合适,因为我们只想跳到flag参数。当您阅读它时,它会更干净,因为null并不意味着-1可能具有一些重要的值(在这种情况下,它没有),但是对于那些也不了解preg_split的人来说,这只会更清楚只是忽略了那个论点。

您是否尝试过您的建议?它对我不起作用

考虑到我还没做完,但是无论如何,您可以测试沙盒链接,并且效果很好。

它不分割空格,只分割逗号X_X

我刚刚检查了沙盒链接-也不起作用

现在可以了...简单地只需使用|即可,例如,您无法捕获[...]内部。如果使用(,)\\s*|\\s是,并且没有空格或更多空格,并且如果使用此\\s*(,)\\s*|\\s,则它可以执行","或","或","或",",您还需要什么?

这就是答案!非常感谢你!我的天哪<3

当然,这没什么大不了的。

您也可以将(,)\\s|\\s减小为(,)?\\s+

当逗号不被空格包围时,我将使用preg_split(\\s+|(,), $string, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY)防止出现空结果。

大家好,我也要在其中添加(=)吗?因此,它可以像使用逗号一样拆分=的运算符,以及如何在其中添加所有运算符,以拆分遇到或有空格的地方(=,,<=,> = ,!=,<>):D

@emma:将(,)更改为(,|[<>!]?=|<>?|>)

@CasimiretHippolyte谢谢youuuu! :D我可以问offtopic我在哪里可以学习如何编写或编写模式? :-s

@emma:阅读"掌握正则表达式"-J Friedl,Oreilly(您可以免费找到以前的版本),查看rexegg.com,pcre.org,最重要的是使用regex101或简短的php cli脚本进行练习。

@CasimiretHippolyte <3谢谢!我将检查所有这一切:D其模式如何表现非常有趣:D

您打算在逗号前在每个空格或零宽度位置拆分字符串。

以下模式将在(并吸收/销毁)空格上爆炸,并向前看逗号-在这种情况下,该限定符不会丢失任何字符。

在编写此模式时,您将不需要包括preg_split()可用的第3或第4参数。

对于最严格的做法,当您的输入可能格式不正确时,您可能需要包括NO_EMPTY标志(实现为preg_split('/ |(?=,)/', $string, null, PREG_SPLIT_NO_EMPTY)。

代码:(演示)

$string ="It's just me, myself, i and an empty glass of wine. Age = 21";

$array = preg_split('/ |(?=,)/', $string);

print_r($array);

输出:

Array

(

[0] => It's

[1] => just

[2] => me

[3] => ,

[4] => myself

[5] => ,

[6] => i

[7] => and

[8] => an

[9] => empty

[10] => glass

[11] => of

[12] => wine.

[13] => Age

[14] => =

[15] => 21

)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部