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