$string = 'Some string';
$pos = 5;
...??...
$begging // == 'Some s';
$end // == 'tring';
Каков наилучший способ отделить строку по две от заданной позиции?
$string = 'Some string';
$pos = 5;
...??...
$begging // == 'Some s';
$end // == 'tring';
Каков наилучший способ отделить строку по две от заданной позиции?
Вы можете использовать substr
, чтобы получить две подстроки:
$str1 = substr($str, 0, $pos);
$str2 = substr($str, $pos);
Если вы опускаете третью длину параметра, substr
берет оставшуюся часть строки.
Но для получения вашего результата вам действительно нужно добавить его в $pos
:
$string = 'Some string';
$pos = 5;
$begin = substr($str, 0, $pos+1);
$end = substr($str, $pos+1);
Регулярное решение (если вы в нем):
...
$string = 'Some string xxx xxx';
$pos = 5;
list($beg, $end) = preg_split('/(?<=.{'.$pos.'})/', $string, 2);
echo "$beg - $end";
Привет
БВУ
Как насчет substr()?
$string = 'Some string';
$pos = 5;
$beginning = substr($string, 0, $pos);
$end = substr($string, $pos);
Каков наилучший способ разделить строка в два по заданной позиции?
Если я правильно вас понимаю, вы можете сделать:
$str = 'hello world';
$pos = 5;
$separated_str = substr($str, $pos);
echo $separated_str;
Результат:
world
Это зависит от структуры вашей строки, поскольку есть и другие способы разделить строку.
Я искал быстрый способ разбить строку в заданной позиции.
Почему данная позиция? Обычно вам нужно разделить персонаж (я думаю, что вы искали по позиции, потому что функция разрыва разделила строку на слишком много частей):
Мое решение было окончательно:
$string = "hello world my dear";
list ($first, $remaining ) = split (' ', $string, 2); //limit to 2 pieces
echo $first; //"hello";
echo $remaining; //"world my dear";
Обратите внимание, что я отказался от использования "позиции" (я использовал "substr" для его получения).
Учитывая, что ваша потребность в "позиции" действительно не нужна, мое решение является самым быстрым среди всех вышеперечисленных и не имеет многобайтовых проблем. Также я думаю, что читать гораздо легче.
К несчастью, эта функция устарела в последнем PHP, вы можете использовать ее, если у вас есть старый PHP или вы можете использовать preg_split. Я был не очень доволен этим, потому что единственный способ добиться такой же функциональности - злоупотреблять регулярным выражением. Если вы не можете использовать split
, самая быстрая альтернатива:
$string = "hello world my dear";
list ($first, $remaining ) = preg_split('/\s+/', $string, 2);
который намного быстрее, чем @rubber, и вообще не использует позицию.
Ссылка: Разделить документацию
Wordwrap работает лучше, на мой взгляд.
$text = "The quick brown fox jumped over the lazy dog.";
$newtext = wordwrap($text, 20, "<br />\n");
echo $newtext;
Вышеприведенный пример выводит:
The quick brown fox<br />
jumped over the lazy<br />
dog.
Другой пример:
$text = "A very long woooooooooooord.";
$newtext = wordwrap($text, 8, "\n", true);
echo "$newtext\n";
Вышеприведенный пример выводит:
A very
long
wooooooo
ooooord.
<?php
$string = 'Some string';
$pos = 6;
$number_of_pieces = 2;
list($beginning, $end) = split_into_pieces($string, $pos, $number_of_pieces);
// $beginning === 'Some s'; $end === 'tring'
function split_into_pieces($string, $length, $limit = 0) {
--$length;
return preg_split("/(?<=^..{{$length}}|(?!^)\\G.{{$length}})/", $text, $limit);
}
$string
- это строка для разделения$length
- размер каждой части в кодовых точках Unicode (или символы ASCII, если не используется опция UTF-8, см. ниже). Любое значение меньше 1
будет возвращать всю входную строку в виде отдельной части$limit
- максимальное число или фрагменты, или 0
для неограниченного количества. Последняя часть будет содержать оставшуюся часть строки и может быть длиннее или короче $length
Регулярное выражение, использующее магию, использует положительный внешний вид (?<=
... )
. Он ищет ^
, который является началом строки, |
, или если он не находится в начале строки (?!^)
, он ищет \G
, который является позицией предыдущего совпадения. .
- любой символ, {
n }
повторяется n раз, где n равно {$length}
. При использовании \G
по какой-то причине он добавляет дополнительный символ, поэтому строка --$length;
и почему первое совпадение содержит дополнительный .
для поиска дополнительной кодовой точки, что обычно не допускается в смотрите-зады. Я думаю, что утверждения нулевой ширины ^
и \G
фиксируют шаблон, позволяя разную длину в обратном направлении.
Дополнительные {
и }
вокруг $length
необходимы, чтобы остановить фигурные скобки регулярных выражений как экранированную переменную PHP. /su
являются параметрами регулярных выражений. Опция /s
говорит, что .
соответствует символам новой строки. Опция /u
указывает, что она соответствует кодовым точкам Unicode, закодированным как UTF-8 (удалите u
, если вы обрабатываете строки, не совместимые с UTF-8).