正则表达式使用preg_split一个点(。)

时间:2012-05-09 17:55:52

标签: php regex

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

$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

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

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

希望帮助谢谢!

5 个答案:

答案 0 :(得分: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 )

preg_split会将您的字符串拆分为未被数字包围的所有.。请注意,这意味着它将在您的第一个(30 min aprox.).案例中拆分,其中有.后跟)和另一个.。您需要在)之前或之后删除该期间,以获得所需的确切句子结构。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

您还可以使用positive lookahead。请尝试以下模式:

/\.(?=(\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 
)

See it in action.

答案 3 :(得分:0)

好的,第二次尝试:

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

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

答案 4 :(得分: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开头的字符串,并以“。”结尾。字符跟随(向前看)按步骤(以空格开头)或字符串字符结束。