Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 20.07.2016
Сообщений: 16
1

Регулярка по удалению из строки подстроки + кол-во символов

18.09.2016, 19:24. Показов 1441. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Только начал разбираться в регулярных выражениях, но какого-то понятного гайда не нашел. Собственно, есть строка вида a1 b1 a2 b2 a3 b3 a4 b4 a5 b5, где aN и bN - числа. Разделено это все добро пробелом. Нужно регуляркой в цикле пройтись по строке, удалив какое-то aN + bN после нее. Пример: 12345 54321 784578 52, известно, что нужно удалить a=12345 и следующее значение b после a. Должно получиться 784578 52
Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2016, 19:24
Ответы с готовыми решениями:

Регулярка по удалению лишних пробелов
Добрый день! Уже писал в этом разделе, но ответа не последовало... Суть моего вопрос а в...

Регулярка удаления части символов из строки
Помогите пожалуйста с регуляркой для notepad: Суть: ...

Даны две строки символов. Посчитать в них кол-во символов стоящих на нечетных местах.
Даны две строки символов. Посчитать в них кол-во символов стоящих на нечетных местах.

В строке символов заменить все вхождения подстроки p на не более чем n символов подстроки q
Составить функцию Zam(s,p,q,n), которая в строке символов s заменяет все вхождения подстроки p на...

16
276 / 201 / 143
Регистрация: 22.01.2016
Сообщений: 637
18.09.2016, 20:14 2
как-то так?
PHP
1
2
3
$str = '12345 54321 784578 52';
$del = '12345';
echo preg_replace("~$del\x20\d+~", '', $str);
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
18.09.2016, 21:27 3

Не по теме:

Как варик, но то такое, от нечего делать .


PHP
1
2
3
4
5
6
$str = '12345 54321 784578 52';
$num = '12345';
$del = preg_split("~\\s+~ui",$str,-1,PREG_SPLIT_NO_EMPTY);
$k = array_search($num,$del);
unset($del[$k]); unset($del[$k+1]);
echo implode('',$del);
PHP
1
2
3
4
5
6
$str = '12345 54321 784578 52';
$num = '12345';
$del = preg_split("~\\s+~ui",$str,-1,PREG_SPLIT_NO_EMPTY);
$a = preg_grep("~$num~",$del);
unset($del[key($a)]); unset($del[key($a)+1]);
echo implode('',$del);
0
119 / 116 / 63
Регистрация: 16.09.2016
Сообщений: 354
18.09.2016, 21:32 4
Цитата Сообщение от mrNTF Посмотреть сообщение
как-то так?
не так, в случае $del = '45' ерунда получится
так правильнее
PHP
1
2
3
$str = '12345 54321 784578 52';
$del = '54321';
echo preg_replace("~\x20?[^\d]*$del\x20\d+\x20?~", ' ', $str);
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
18.09.2016, 21:38 5
Цитата Сообщение от svs171 Посмотреть сообщение
не так, в случае $del = '45' ерунда получится
PHP
1
2
3
$str = '45 45 784578 52';
$del = '45';
echo preg_replace("~$del\x20\d+~", '', $str);
784578 52
1
119 / 116 / 63
Регистрация: 16.09.2016
Сообщений: 354
18.09.2016, 21:44 6
Azdeman, укажите в Вашем примере $del = '5'; и посмотрите результат
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
18.09.2016, 21:59 7
Цитата Сообщение от svs171 Посмотреть сообщение
укажите в Вашем примере $del = '5'; и посмотрите результат
и?
PHP
1
2
3
$str = '5 45 784578 52';
$del = '5';
echo preg_replace("~$del\x20\d+~", '', $str);
http://sandbox.onlinephpfuncti... ffa2b528d7
0
119 / 116 / 63
Регистрация: 16.09.2016
Сообщений: 354
18.09.2016, 22:04 8
Зачем строку то менять? вернемся к оригиналу
PHP
1
2
3
$str = '12345 54321 784578 52';
$del = '45';
echo preg_replace("~$del\x20\d+~", '', $str);
на выходе получаем
123 784578 52
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
18.09.2016, 22:09 9
Цитата Сообщение от svs171 Посмотреть сообщение
Зачем строку то менять?
Мы же я так полагаю ищем конкретное число а не вхождение числа в число..
1
276 / 201 / 143
Регистрация: 22.01.2016
Сообщений: 637
18.09.2016, 22:14 10
svs171, я написал чётко по ТЗ, про проверку на наличие числа среди пробелов не было сказано ни слова.
1
119 / 116 / 63
Регистрация: 16.09.2016
Сообщений: 354
18.09.2016, 22:17 11
Azdeman, Вы же не знаете заранее какие числа будут,
например, в таком случае с конкретным числом из набора результат будет неверным:
PHP
1
2
3
$str = '12345 54321 45 5684 784578 52';
$del = '45';
echo preg_replace("~$del\x20\d+~", '', $str);
Добавлено через 1 минуту
mrNTF,
Цитата Сообщение от crazymob Посмотреть сообщение
числа. Разделено это все добро пробелом
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
18.09.2016, 22:20 12
PHP
1
2
3
4
5
6
7
8
9
10
//ну ваш вариант тоже не лучше 
$str = '45 45 784578 52';
$del = '5';
echo preg_replace("~\x20?[^\d]*$del\x20\d+\x20?~", '', $str);
//4 784578 52
 
$str = '45 45 784578 52';
$del = '5';
echo preg_replace("~\\s?[\\d]*$del\x20\\d+\\s?~", ' ', $str);
//  784578 52
1
276 / 201 / 143
Регистрация: 22.01.2016
Сообщений: 637
18.09.2016, 22:35 13
Лучший ответ Сообщение было отмечено crazymob как решение

Решение

svs171, то, о чём вы говорите, не было упомянуто ТС.
Если бы это было упомянуто, то да, я бы написал слегка иначе
PHP
1
2
3
$str = '12345 54321 45 5684 784578 52';
$del = '45';
echo preg_replace("~(?<!\d)$del\x20\d+~", '', $str);
Добавлено через 13 минут
Хотя фиг поймёшь, что вы, svs171, нафантазировали Я лично понял, что если число есть среди пробелов, то его удаляем. Если это 45, то удаляем именно 45, не 345, не 45999. Их просто не трогаем.
1
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
18.09.2016, 22:37 14
Лучший ответ Сообщение было отмечено crazymob как решение

Решение

Цитата Сообщение от mrNTF Посмотреть сообщение
Если это 45, то удаляем именно 45, не 345, не 45999. Их просто не трогаем.
Цитата Сообщение от Azdeman Посмотреть сообщение
Мы же я так полагаю ищем конкретное число а не вхождение числа в число..
вот вот...
Или так
PHP
1
2
3
$str = '12345 54321 45 5684 784578 52';
$del = '45';
echo preg_replace("~\b$del\b\x20\d+~", '', $str);
1
0 / 0 / 0
Регистрация: 20.07.2016
Сообщений: 16
18.09.2016, 22:38  [ТС] 15
mrNTF, ваш вариант подошел. Спасибо всем за помощь, верно подмечено, имелось ввиду именно конкретные числа, а не просто вхождение.
0
119 / 116 / 63
Регистрация: 16.09.2016
Сообщений: 354
18.09.2016, 22:38 16
mrNTF, ну я как бы просто процитировал ТС, вероятно мы по разному восприняли прочитанное.
А решение красивое, я утверждения в регулярках раньше не использовал, да и не изучал, пойду почитаю
2
0 / 0 / 0
Регистрация: 20.07.2016
Сообщений: 16
18.09.2016, 23:04  [ТС] 17
Azdeman, не увидел сразу ваш вариант. В вашем случае можно к строке поиска добавлять пробел, в следствие чего можно избежать двойной пробел. Так лучше
0
18.09.2016, 23:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2016, 23:04
Помогаю со студенческими работами здесь

Удалить конец строки символов. Ввести кол-во удаляемых символов , вывести результат ,String ,задачка,С++
Удалить конец строки символов. Ввести количество удаляемых символов , вывести результат на печать ....

Выделения из исходной строки подстроки символов
Написать программу выделения из исходной строки подстроки символов заданной длины с указанного...

Разбор строки на подстроки по количеству символов
необходимо разобрать строку на массив строк в котором содержится указанное количество символов

Деление строки на подстроки размером 5 символов каждая
Здравствуйте товарищи программисты! Помогите решить задачу :cry:: пользователь вводит строку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru