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

You can also use a positive lookahead. Try the following pattern:

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

Integrated into the code, like so:

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

Output:

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

See it in action.

于 2012-05-09T18:22:16.580 に答える
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すべての文字列が分割されます。これは、その後にaと別のが続く.最初のケースで分割されることを意味することに注意してください。必要な正確な文型を取得するには、の前後のその期間を削除する必要があります。(30 min aprox.)..).)

于 2012-05-09T18:19:20.633 に答える
1

より一般的なケースが必要な場合は、これが役立つ場合があります。

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

私はそれをテストしていませんが、あなたが望むことをするだろうと思います。

于 2012-05-09T18:19:55.677 に答える
0

了解しました。2回目の試行:

$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 に答える