2016-08-18 3 views
0

У меня есть строка с большим списком с пунктами имени следующим образом:Поиск и заменить все строки в многострочной строке

str = "f05cmdi-test1-name1 
f06dmdi-test2-name2"; 

Таким образом, первые 4 символом являются случайными символами. И я хотел бы иметь выход так:

'mdi-test1-name1', 
'mdi-test2-name2', 

Как вы можете видеть первые символы из строки должны быть заменена на «и каждая строка должна заканчиваться»,

Как может Я изменяю приведенную выше строку в строку ниже? Я пробовал для наших с «strstr» и «str_replace», но я не могу заставить его работать. Это сэкономит мне много времени, если я заработаю.

Спасибо за помощь, ребята!

+0

Вы еще интересовались регулярными выражениями? –

ответ

1

Вот способ для работы:

$input = "f05cmdi-test1-name1 
f05cmdi-test2-name2"; 

$result = preg_replace("/.{4}(\S+)/", "'$1',", $input); 
echo $result; 

Место, где \S обозначает символ НЕ-пробела.

+0

Это отлично работает! Единственное, что мне нужно было добавить: 'mdi' до' $ s'. Большое спасибо! – Nick

0

EDIT: Я удалил вышеуказанное, так как следующий метод лучше и надежнее и может использоваться для любой возможной комбинации из четырех символов.

Итак, что мне делать, если в качестве стартовых символов есть миллион различных возможностей?

В вашем конкретном примере я вижу, что только пространство между полными строками (полная строка = "f05cmdi-test1-name1")

Итак:

str = "f05cmdi-test1-name1 f06dmdi-test2-name2"; 
$result_array = []; 
// Split at the spaces 
$result = explode(" ", $str); 
foreach($result as $item) { 
    // If four random chars take string after the first four random chars 
    $item = substr($item, 5); 
    $result_array = array_push($result_arrray, $item); 
} 

Результирующее в:

$result_array = [ 
    "mdi-test1-name1", 
    "mdi-test2-name2", 
    "....." 
]; 

IF вам нужна одна строка в стиле:

"'mdi-test1-name1','mdi-test2-name2','...'"

Тогда вы можете просто сделать следующее:

$result_final = "'" . implode("','" , $result_array) . "'"; 
+0

Большое спасибо Рафаэлю, но я узнал, что есть также строки, начинающиеся с 'f09cmdi' или' f11dmdi', поэтому не все начинается с 'f05c'. Например, это может быть '$ str =" f11dmdi-test1-name1 f09cmdi-test2-name2 ";' – Nick

+0

Обновлено мой ответ :) –

0

Это выполнимо в довольно простой схеме регулярных выражений

<?php 

$str = "f05cmdi-test1-name1 
f05cmdi-test2-name2"; 

$str = preg_replace("~[a-z0-9]{1,4}mdi-test([0-9]+-[a-z0-9]+)~", "'mdi-test\\1',", $str); 
echo $str; 

Alter к вашим конкретным потребностям

+0

Спасибо, это отлично работает, но я узнал, что есть также строки, начинающиеся с ' f09cmdi' или 'f11dmdi'. Так, например, это может быть '$ str =" f11dmdi-test1-name1 f09cmdi-test2-name2 ";' – Nick

+0

Я обновил регулярное выражение в соответствии с вашими случаями –

+0

Отлично работает. Можно ли также использовать его, когда изменяется имя 'test'?Итак, если, например, список содержит '$ str = 'f05cmdi-abc-def f05cmdi-ghi-klm"; '? – Nick