你好我需要用“。”拆分一个字符串。 有:
$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
前一个字符(在'。'之前)不能是数字或特殊字符,下一个字符必须是大写字母。
注意:步骤*只是一个例子
希望帮助谢谢!
答案 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
)
答案 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开头的字符串,并以“。”结尾。字符跟随(向前看)按步骤(以空格开头)或字符串字符结束。