1

给定以下句子:

The is 10. way of doing this. And this is 43. street.

我希望 preg_split() 给出这个:

Array (
 [0] => "This is 10. way of doing this"
 [1] => "And this is 43. street"
)

我在用:

preg_split("/[^\d+]\./i", $sentence)

但这给了我:

Array (
 [0] => "This is 10. way of doing thi"
 [1] => "And this is 43. stree"
)

如您所见,每个句子的最后一个字符都被删除了。我知道为什么会发生这种情况,但我不知道如何防止它发生。有任何想法吗?前瞻和后瞻可以在这里提供帮助吗?我对那些不是很熟悉。

4

2 回答 2

2

您想为此使用否定断言

preg_split("/(?<!\d)\./i",$sentence)

不同之处在于[^\d]+它将成为匹配的一部分,因此split会删除它。断言也是匹配的(?!,但是是“零宽度”,这意味着它不会成为分隔符匹配的一部分,因此不会被丢弃。

于 2011-11-18T03:49:59.653 回答
0

要在前面没有数字的文字点上爆炸你的字符串,匹配非数字,然后重置完整字符串匹配\K(意思是从这里“保留”),然后匹配“一次性”字符 - 文字点和零或更多空格。

代码:(演示

$string = 'The is 10. way of doing this. And this is 43. street.';
var_export(
    preg_split('~\D\K\. *~', $string, 0, PREG_SPLIT_NO_EMPTY)
);

或(演示

var_export(
    preg_split('~(?<!\d)\. *~', $string, 0, PREG_SPLIT_NO_EMPTY)
);

或(演示

var_export(
    preg_split('~(?<=\D)\. *~', $string, 0, PREG_SPLIT_NO_EMPTY)
);

输出:(全部干净,没有尾随点,没有尾随空格,没有意外丢失的字符)

array (
  0 => 'The is 10. way of doing this',
  1 => 'And this is 43. street',
)
于 2021-03-18T14:00:23.690 回答