2015-03-02 2 views
0

У меня есть эта строка (98)Трудный PHP Функция String

1994 Acura Integra Type R OEM B18C5 OEM Tranny All Stock Interior. 165,000 MI $9500 (000) 000-1696 

мне нужно разбить его на строки позиции 57.

Мое намерение найти первое вхождение символа пробела (регулярное выражение \s) происходит в обратном направлении от поз 57.

Затем разбейте строку там, так что строка будет разделена следующим образом:

1994 Acura Integra Type R OEM B18C5 OEM Tranny All Stock // str1 
Interior. 165,000 MI $9500 (000) 000-1696    // str2 

Я попробовал несколько способов, и не могу решить:

$charAt58 = substr($content, 57, 1); 

$hasWhiteSpaceAt58 = preg_match('/\s/', $charAt58); 

if (!$hasWhiteSpaceAt58) { 
    echo "false"; 
    $contentr = strrev($content); 
    echo "<br>"; 
    echo strpos($contentr, " ", 57); 
} 

Любая помощь будет весьма признателен.

+0

К сожалению, может быть строка не разрушался при интерьере, но это, кроме точки. Дело в том, что слово может быть разбито на 57, в этом случае мне нужно разбить строку в правильном месте, которое было бы в пробеле до str pos 57. – Rafael

+0

Тогда эта позиция всегда была бы такой 'strrpos ($ string, ', 57); ' –

+0

Нет, этот алгоритм не будет реализован в динамической программе. – Rafael

ответ

2
^.{1,57}(?=\s) 

Попробуйте это простое regex.See demo.This позволит regex захватывать до 57, а затем backtrack, пока не найдет space. Взгляд заставит его отступить, пока не найдет место.

https://regex101.com/r/wU7sQ0/37

+1

Хм это похоже на многообещающий подход. Я буду работать с этим и посмотреть, как это происходит с динамически загружаемыми другими строками. – Rafael

+1

Похоже, это будет, я просто должен убедиться, прежде чем я приму ответ. Но пока это похоже на ответ. Я реализую его через секунду и вернусь. – Rafael

0

Просто используйте положительный взгляд и разделите на это.

\s(?=Interior) 

Вышеуказанные матчи только \s, который затем Interior

var_dump(preg_split("/\s(?=Interior)/", $input_line)); 

DEMO

+2

есть какая-то причина для downvoting, чтобы дать ответ улучшить или узнать, что не так или просто бессмысленное downvoting? –

0

Это будет делать:

$pos = strrpos($content, ' ', 57); 
$output = substr($content, 0, $pos) .'\n'. substr($content, $pos); 
+0

Downvote? Любой комментарий почему? – Forien

0
$s = '1994 Acura Integra Type R OEM B18C5 OEM Tranny All Stock Interior. 165,000 MI $9500 (000) 000-1696'; 
$parts = str_split($s, strrpos(substr($s, 0, 57), ' ')+1); 
print_r($parts); 

/* 
Array 
(
    [0] => 1994 Acura Integra Type R OEM B18C5 OEM Tranny All Stock 
    [1] => Interior. 165,000 MI $9500 (000) 000-1696 
) 
*/ 
Смежные вопросы