2011-06-13 4 views
3

Я пытался выяснить, как преобразовать строку под строкой в ​​несколько строк, где она добавит запятую после двух последовательных букв. Anyhelp оценили.using regex и php

$myLine = "1234:21:3AB3459435:2343RT23432523:CD"; 
$myLine= preg_replace('/((?<=\[a-zA-Z]\b))/', ',', $myLine); 

выход будет

1234:21:3AB, 
3459435:2343RT, 
23432523:CD, 

благодарив, JP

Мне нравится все ответы, я ценю все качки, чтобы помочь и побежал через все множество различных способов получения это Работа. это удивительно, что regexp php может сделать одну вещь так много разных способов. спасибо всем снова !!!!

+2

ли вы имеете в виду 2 последовательных букв или два/же/букв (например, АА, ABB) –

+0

в последовательные буквы, как в строке выше есть AB RT CD и т.д. ...конечный результат будет 1234: 21: 3AB, 3459435: 2343RT, 23432523: CD, новая строка будет после запятой (извините за это) – jpp

+1

Не хватает некоторых деталей. Что такое «несколько строк»? Можете ли вы отредактировать и опубликовать ожидаемый результат, поэтому нам не нужно угадывать? – netcoder

ответ

2

Вот что я придумал быстро.

$myLine = "1234:21:3AB3459435:2343RT23432523:CD"; 
$myLine= preg_replace('/([a-zA-Z]{2})/', "$1,\n", $myLine); 

Выходы:

1234:21:3AB, 
3459435:2343RT, 
23432523:CD, 

Или, если вы не хотите, Запятая:

$myLine = "1234:21:3AB3459435:2343RT23432523:CD"; 
$myLine= preg_replace('/([a-zA-Z]{2}(?!$))/', "$1,\n", $myLine); 

Выходы:

1234:21:3AB, 
3459435:2343RT, 
23432523:CD 
+0

можно отделить четвертую позицию от одной до трех в одно и то же время или мне придется использовать другое регулярное выражение, например, получить 21 :, 234, 523 & deg; – jpp

+0

@jpp: Я сделал бы это в отдельном регулярном выражении. Или еще лучше, вы можете 'substr' получить диапазон символов, которые вы хотите. –

+0

, но возможен ли субстрат со спины струны? – jpp

1

Я не знаю, где вы хотите новую строку, но, насколько последовательные письма идут, это было бы что-то вроде:

$myLine= preg_replace('/([a-zA-Z]{2})/', '$1,', $myLine); 
2
$myLine = "1234:21:3AB3459435:2343RT23432523:CD"; 
$myLine = preg_replace('/([a-z]{2})/i', '$1,', $myLine); 
0

Добавить {2}, чтобы он соответствовал ровно в два раза ,

/((?<=[a-zA-Z]{2}))/ 

Кроме того, вы можете использовать \w для любого символа слова.

/((?<=\w{2}\b))/ 
1

Что-то, как это должно работать для вы:

preg_replace('~([a-z]{2})~i', "$1,", $myLine) 
1

попробовать это:

$myLine = "1234:21:3AB3459435:2343RT23432523:CD"; 
$myLine= preg_replace("/([a-z]{2})/i","$1,\n", $myLine); 
0

У меня немного проблемы интерпретации ваш вопрос. Предполагая, что вы имеете в виду вы хотите, чтобы ваши данные выборки из "1234: 21: 3AB3459435: 2343RT23432523: CD" должны быть преобразованы в "1234: 21: 3AB, 3459435: 2343RT, 23432523: CD":

$myLine= preg_replace('/([a-zA-Z]{2})/','$1,',$myLine); 

должен Работа. Шаблон соответствует ровно двум символам букв в строке, а круглые скобки вокруг него делают это соответствие доступным в качестве ссылки в замене. Замена затем берет два совпадающих символа и просто ставит запятую после них. См. http://us.php.net/manual/en/function.preg-replace.php для более подробной информации.

Если вы хотите, чтобы результат был несколько строк (например, для более красивого вывода), просто измените выражение замены, чтобы включить новую строку, например.

$myLine= preg_replace('/([a-zA-Z]{2})/','$1'.",\n",$myLine);