php, вторая последняя запятая в строке, чтобы разбить строку, или регулярное выражение - PullRequest
1 голос
/ 03 марта 2010

Я пытаюсь найти способ разбить строку на второй последней запятой, например:

piece 1, piece 2, piece 3, piece 4, piece 5, piece 6, piece 7 должно быть 2 части:

piece 1, piece 2, piece 3, piece 4, piece 5 и

piece 6, piece 7

и

piece 1, piece 2, piece 3, piece 4, piece 5 должно быть:

piece 1, piece 2, piece 3 и

piece 4, piece 5

Есть ли строковые манипуляции для поиска строки для символа и определения позиции второго последнего экземпляра этого символа?

Я думал о том, чтобы взорвать строку с помощью ,, затем склеить последние 2, чтобы получить часть 2, и склеить как можно больше первых (разных), чтобы сделать часть 1, но я думаю, что это может быть излишним. Любые струнные манипуляции для этого?

Ответы [ 5 ]

3 голосов
/ 03 марта 2010

Используйте strrpos, чтобы найти позицию последней запятой.

Используйте strrpos с последней позицией в качестве смещения , чтобы найти вторую последнюю запятую.

Прервите строку с помощью substr.

1 голос
/ 04 марта 2010

почему вы думаете, что это излишнее использование array_splice () ?

$string="piece 1, piece 2, piece 3, piece 4, piece 5, piece 6, piece 7";
$s = explode(",",$string);
$t=array_slice($s, 0,-2);
$e=array_slice($s,-2);
print_r($t);
print_r($e);
0 голосов
/ 03 марта 2010
echo preg_replace('~,\s*(?=[^,]*,[^,]*$)~', ",\n", $str)

Регулярные выражения - это инструмент, специально разработанный для подобных задач, и нет единой причины не использовать их. strpos () и друзья такие глупые и многословные ...

0 голосов
/ 03 марта 2010

Несмотря на то, что я согласен с codaddict, что регулярные выражения, вероятно, на самом деле не нужны, вот еще:

Для первых n-2 элементов замените ',[^,]+,[^,]+$' на '' в строке

Для последних 2 элементов найдите совпадение '[^,]+,[^,]+$' в строке

0 голосов
/ 03 марта 2010

Regex - это излишество, вы можете легко использовать strpos и substr, как упомянуто Кенни Но вот регулярное решение regex:

if(preg_match('{^(.*),(.*?),(.*?)$}',$input,$matches)) {
  $part1 = $matches[1];
  $part2 = $matches[2].','.$matches[3];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...