1

你好我需要用“。”分割一个字符串。有 :

$string = "Step one (30 min aprox.).Step two.Step three $12.00. Step four ud. visit ";

和:

preg_split('/[.]/', $string)

我得到:

array(7) {
  [0]=>
  string(22) "Step one (30 min aprox"
  [1]=>
  string(1) ")"
  [2]=>
  string(8) "Step two"
  [3]=>
  string(14) "Step three $12"
  [4]=>
  string(2) "00"
  [5]=>
  string(13) " Step four ud"
  [6]=>
  string(7) " visit "
}

我只想要这个

[0] Step one (30 min aprox.)
[1] Step two
[2] Step three $12.00
[3] Step four ud. visit

前一个字符('.' 之前)不能是数字或特殊字符,下一个字符必须是大写字母。

注意:步骤 * 只是一个示例

希望帮助谢谢!

4

5 回答 5

1

想出了一个更好preg_split的字符串:

$string = "Step one (30 min aprox.).Step two.Step three $12.00. Step four ud. visit ";
print_r( preg_split('/(?<=[^0-9])[.](?<![0-9])/', $string, 0));

Array ( 
 [0] => Step one (30 min aprox 
 [1] => ) 
 [2] => Step two
 [3] => Step three $12.00. Step four ud 
 [4] => visit )

这将在所有未被数字包围的 spreg_split上拆分您的字符串。.请注意,这意味着它将在您的第一种情况下拆分,(30 min aprox.).即 a.后跟 a)和 another .。您需要在 之前或之后删除该句点)以获得您想要的确切句子结构。

于 2012-05-09T18:19:20.633 回答
1

如果您想要更一般的情况,这可能会有所帮助。

$string = preg_replace("/\.\s?([A-Z])/", "*****$1", $string);
$array = explode("*****", $string);

我没有测试过它,但我认为它会做你想要的。

于 2012-05-09T18:19:55.677 回答
1

您也可以使用积极的前瞻。尝试以下模式:

/\.(?=(\s*)Step)/

集成到代码中,如下所示:

// Split on periods that are followed possibly by 0+ spaces, and the word 'Step'
preg_split('/\.(?=(\s*)Step)/', $string) 

输出:

Array
(
    [0] => Step one (30 min aprox.)
    [1] => Step two
    [2] => Step three $12.00
    [3] =>  Step four ud. visit 
)

在行动中看到它。

于 2012-05-09T18:22:16.580 回答
0

好的,第二次尝试:

$array = preg_split (/\.\s?Step/, $string);
$l = count ($array);
for ($i=1; $i<$l; $i++) {
    $array [$i] = 'Step' . $array [$i];
}

这不是最好的方法,但考虑到你是字符串非常不一致的事实,它可能是最简单的方法。

于 2012-05-09T18:16:56.693 回答
0

这似乎适用于您的示例字符串

$string = "Step one (30 min aprox.).Step two.Step three $12.00. Step four ud. visit ";

preg_match_all("/(Step.*?)(\.(?=\s*Step)|$)/",$string,$matches);

foreach ($matches[1] as $m) {
    echo $m,"\n";
}

该模式查找以 Step 开头并以 '.' 结尾的字符串。字符后跟(向前看)步(前面有空格)或字符串字符的结尾。

于 2012-05-09T18:33:50.830 回答