2010-02-25 3 views
0

У меня есть строкаpreg_replace все символы до определенного одного

&168491968426|mobile|3|100|1&185601651932|mobile|3|120|1&114192088691|mobile|3|555|5& 

и я должен удалить, скажем, эта часть & | мобильный | 3 | 120 | 1 & (начиная с усилитель и заканчивая усилителем) зная только первый номер до вертикальной линии (185601651932)

так, что в результате я бы

&168491968426|mobile|3|100|1&114192088691|mobile|3|555|5& 

Как я могу сделать это с помощью функции PHP preg_replace. Количество разделенных строк (|) было бы всегда одинаковым, но все же идентификатор должен иметь гибкий шаблон, не зависящий от количества строк между значком &.

Спасибо.

P.S. Кроме того, я был бы благодарен за ссылку на хороший простой письменный ресурс, связанный с регулярными выражениями в php. Есть много из них в гугле :) но, возможно, вам случится иметь действительно отличную ссылку

ответ

1
preg_replace("/&185601651932\\|[^&]+&/", ...) 

Обобщенный,

$i = 185601651932; 
preg_replace("/&$i\\|[^&]+&/", ...); 
+0

да! это оно! кроме, я не нуждаюсь в финале &, так что это всего лишь preg_replace ("/ & 185601651932 \\ | [^ &] + /", ...) Большое спасибо – dr3w

0

Важно: не забывайте экранировать свой номер preg_quote():

$string = '&168491968426|mobile|3|100|1&185601651932|mobile|3|120|1&114192088691|mobile|3|555|5&'; 
$number = 185601651932; 
if (preg_match('/&' . preg_quote($number, '/') . '.*?&/', $string, $matches)) { 
    // $matches[0] contains the captured string 
} 
0

Мне кажется, вы должны использовать другую структуру данных, чем строка для управления этими данными. Я хочу эти данные в структуре, как

Array(
    [id] => Array(
    [field_1] => value_1 
    [field_2] => value_2 
) 
) 

Ваша массивная цепочка может быть массируют в такую ​​структуру, делая что-то вроде этого:

$data_str = '168491968426|mobile|3|100|1&185601651932|mobile|3|120|1&114192088691|mobile|3|555|5&'; 
$remove_num = '185601651932'; 

/* Enter a descriptive name for each of the numbers here 
- these will be field names in the data structure */ 
$field_names = array( 
    'number', 
    'phone_type', 
    'some_num1', 
    'some_num2', 
    'some_num3' 
); 

/* split the string into its parts, and place them into the $data array */ 
$data = array(); 
$tmp = explode('&', trim($data_str, '&')); 
foreach($tmp as $record) { 
    $fields = explode('|', trim($record, '|')); 
    $data[$fields[0]] = array_combine($field_names, $fields); 
} 

echo "<h2>Data structure:</h2><pre>"; print_r($data); echo "</pre>\n"; 
/* Now to remove our number */ 
unset($data[$remove_num]); 
echo "<h2>Data after removal:</h2><pre>"; print_r($data); echo "</pre>\n"; 
Смежные вопросы