php — взорвать строку в . но игнорируйте десятичное число, например 2.9

В настоящее время я взрываю строку в ., и она работает так, как мне нравится. единственная проблема заключается в том, что он также взрывается, когда . встречается в виде десятичной точки. Есть ли способ исключить decimal точек из функции разнесения?

Моя текущая настройка: как вы можете видеть, она взрывается на . между двумя числами.

$String = "This is a string.It will split at the previous point and the next one.Here 7.9 is a number";

$NewString = explode('.', $String);

print_r($NewString);

output

Array ( 
[0] => This is a string 
[1] => It will split at the previous point and the next one 
[2] => Here 7 
[3] => 9 is a number 
)

person StevenPHP    schedule 07.11.2013    source источник


Ответы (2)


Вы можете использовать preg_split для этого с регулярным выражением /(?<!\d)\.(?!\d)/:

<?php
    $String = "This is a string. It will split at the previous point and the next one. Here 7.9 is a number";

    $NewString = preg_split('/(?<!\d)\.(?!\d)/', $String);

    print_r($NewString);
?>

Вывод:

Array
(
    [0] => This is a string
    [1] =>  It will split at the previous point and the next one
    [2] =>  Here 7.9 is a number
)

ДЕМО

Что означает регулярное выражение?

  • (?<!\d) — «отрицательный поиск назад», означающий, что он будет совпадать только в том случае, если перед точкой НЕТ цифры (\d)
  • \. - буквальный символ .. Его нужно экранировать, так как . в регулярном выражении означает «любой символ».
  • (?!\d) — «отрицательный просмотр вперед», означающий, что он будет совпадать только в том случае, если после точки НЕТ цифры (\d)

Дополнительно:

Вы можете избавиться от пробелов, используя регулярное выражение как /(?<!\d)\.(?!\d)\s*/, которое также будет соответствовать любому количеству пробелов после точки, или же вы можете использовать $NewString = array_map('trim', $NewString);.

person h2ooooooo    schedule 07.11.2013
comment
большое спасибо, я не думал о регулярном выражении, и спасибо за ваше объяснение. - person StevenPHP; 07.11.2013

Если вам нужно взорвать текст, как в вашем примере, простой способ сделать это — взорвать «.» вместо «.».

$String = "This is a string. It will split at the previous point and the next one. Here 7.9 is a number";

$NewString = explode('. ', $String);

print_r($NewString);

output

Array ( 
[0] => This is a string 
[1] => It will split at the previous point and the next one 
[2] => Here 7.9 is a number
)
person Casper André Casse    schedule 07.11.2013