Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在使用preg_split at后保留标点符号?_Php_Preg Split - Fatal编程技术网

Php 在使用preg_split at后保留标点符号?

Php 在使用preg_split at后保留标点符号?,php,preg-split,Php,Preg Split,我试图在问号、感叹号或句点处拆分字符串,但同时我试图在拆分后保留标点符号。我该怎么做?谢谢 $input = "Sentence1?Sentence2.Sentence3!"; $input = preg_split("/(\?|\.|!)/", $input); echo $input[0]."<br>"; echo $input[1]."<br>"; echo $input[2]."<br>"; $input=“句子1?句子2.句子3!”; $input

我试图在问号、感叹号或句点处拆分字符串,但同时我试图在拆分后保留标点符号。我该怎么做?谢谢

$input = "Sentence1?Sentence2.Sentence3!";
$input = preg_split("/(\?|\.|!)/", $input);
echo $input[0]."<br>";
echo $input[1]."<br>";
echo $input[2]."<br>";
$input=“句子1?句子2.句子3!”;
$input=preg_split(“/(\?\.\.\!)/”,$input);
回显$input[0]。“
”; 回显$input[1]。“
”; echo$input[2]。“
”;
预期产出:

第1句?
第2句。
第三句

实际产出:

句子1
句子2
句子3

万事通

PREG_SPLIT_DELIM_CAPTURE 如果设置了此标志,分隔符模式中的括号表达式也将被捕获并返回

因此,在你的情况下:

$input = preg_split("/(\?|\.|!)/", $input,NULL,PREG_SPLIT_DELIM_CAPTURE);

您可以通过将正则表达式中的捕获组更改为类似的:


$input=preg_split(“/(?@PaulCrovella)我想你是对的。当我测试它时,出现了一个未定义的偏移量错误,它只在句子1和句子2之间分割。
$input = preg_split("/(?<=\?|\.|!)/", $input);