Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите составить регулярное выражение

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Cajka
Отправлено: 05 Ноября, 2016 - 13:04:13
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




Не могу правильно составить регулярное выражение.

Есть примерно такая строка
-24x+1a-6xy-1b-10

Нужно заменить все 1 перед которыми стоят буквы, не трогая сами буква.

У меня такое регулярное выражение:


Нужные подстроки находит, но при замени захватывает и буквы после 1-цы.
 
 Top
Мелкий Супермодератор
Отправлено: 05 Ноября, 2016 - 15:16:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Cajka пишет:
заменить все 1 перед которыми стоят буквы

Cajka пишет:
Нужные подстроки находит

Так перед или после?

Можно вернуть куквы обратно

либо lookahead'ом их не включать в совпадение:


-----
PostgreSQL DBA
 
 Top
Fart
Отправлено: 05 Ноября, 2016 - 15:43:11
Post Id



Посетитель


Покинул форум
Сообщений всего: 324
Дата рег-ции: Июль 2016  


Помог: 10 раз(а)




ув. Мелкий:

а если так?
до регулярок: -24x+11a-6xy-11b-10
после
1. -24x+1a-6xy-1b-10
2. -24x+1a-6xy-1b-10

если без регулярки, то:

Спойлер (Отобразить)
 
 Top
Cajka
Отправлено: 05 Ноября, 2016 - 15:45:54
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




Мелкий, нужно заменить 1-цу после которой идут буквы.
(Добавление)
Fart, 1-цы вообще не должно быть после обработки.
 
 Top
Fart
Отправлено: 05 Ноября, 2016 - 16:01:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 324
Дата рег-ции: Июль 2016  


Помог: 10 раз(а)




пример внимательно смотрите 11 и 1... 11 убрать?? как и 1??
 
 Top
Строитель Модератор
Отправлено: 05 Ноября, 2016 - 16:01:55
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Cajka
Cajka пишет:
1-цы вообще не должно быть после обработки.
PHP:
скопировать код в буфер обмена
  1. $answer = '-24x+1a-6xy-1b-10';
  2.  
  3. $answer = preg_replace('~(1([a-z]+))~', '$2', $answer);
  4.  
  5. echo '<pre>'; var_dump($answer); // -24x+a-6xy-b-10
  6.  
 
 Top
Fart
Отправлено: 05 Ноября, 2016 - 16:02:53
Post Id



Посетитель


Покинул форум
Сообщений всего: 324
Дата рег-ции: Июль 2016  


Помог: 10 раз(а)




Строитель

$answer = '-24x+11a-6xy-11b-10';

такой пример
(Добавление)
Cajka мой пример внимательно смотрите 11 и 1 убрать совместно?)))
 
 Top
Строитель Модератор
Отправлено: 05 Ноября, 2016 - 16:06:38
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Fart
Fart пишет:
$answer = '-24x+11a-6xy-11b-10';
В этом варианте будет отброшена только первая цифра.
 
 Top
Fart
Отправлено: 05 Ноября, 2016 - 16:14:46
Post Id



Посетитель


Покинул форум
Сообщений всего: 324
Дата рег-ции: Июль 2016  


Помог: 10 раз(а)




ну так а надо же 1b = b, 11b = 11b, 1b != 11b

(Отредактировано автором: 05 Ноября, 2016 - 16:15:45)

 
 Top
Строитель Модератор
Отправлено: 05 Ноября, 2016 - 16:51:15
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Fart пишет:
ну так а надо же 1b = b, 11b = 11b, 1b != 11b
Вы уверены? ТС просит вот что :
Цитата:
Нужно заменить все 1 перед которыми стоят буквы, не трогая сами буква
Я так понимаю, что замене подлежат все единицы, и если это так, тогда ему нужно что-то, вроде этого
PHP:
скопировать код в буфер обмена
  1. $answer = '-24x+1a-6xy-11b-10';
  2.  
  3. $answer = preg_replace('~(1+([a-z]+))~', '$2', $answer);
  4.  
  5. echo '<pre>'; var_dump($answer); // -24x+a-6xy-b-10
 
 Top
Cajka
Отправлено: 05 Ноября, 2016 - 17:44:25
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




Про 11 вообще не было речи. Просто надо найти 1 перед набором букв и удалить ее, все.
 
 Top
Строитель Модератор
Отправлено: 05 Ноября, 2016 - 18:04:13
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Cajka, тогда оба моих варианта вам подойдут.
 
 Top
Cajka
Отправлено: 06 Ноября, 2016 - 06:09:34
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




[quote=Строитель][/quote], спасибо. Сегодня протестирую и отпишусь.
 
 Top
Fart
Отправлено: 06 Ноября, 2016 - 14:01:37
Post Id



Посетитель


Покинул форум
Сообщений всего: 324
Дата рег-ции: Июль 2016  


Помог: 10 раз(а)




тогда такой вопрос:

зачем нужна регулярка и вообще такая обработка строки если данные статичны? Не понял

и второе про полином:

приведенная выше регулярка нарушает полином. если это какие то работы с полиномами... то вид полинома до -24x+1a-6xy-11b-10 и после -24x+a-6xy-b-10 - нарушает его целостность.

и полиномы могут быть такого вида если в динамике -24x+121a-6xy-121b-10, -241x+991a-61xy-991b-10 и так далее

в результате несложно догадаться что происходит с полиномами, а о конечном равенстве после обработки вообще речи не пойдет?

(Отредактировано автором: 06 Ноября, 2016 - 14:10:40)

 
 Top
Cajka
Отправлено: 07 Ноября, 2016 - 08:12:00
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




[quote=Строитель][/quote], нет, мне не все единицы нужно заменить, а только одну, перед которой нет других цифр и после которой идут буквы. Моя вина, не уточнила сразу.
Ваша выражение работает, но можно его дополнить нужными условиями?

Я попробовала дописать вот так, но увы, этот вариант не работает.

PHP:
скопировать код в буфер обмена
  1.  
  2. $answer = '1cc+5x-9+1a-6xy-23x-21b';
  3. preg_replace('~([^\D]1{1}([a-z]+))~', '$2', $answer);
  4.  

(Добавление)
Fart пишет:

зачем нужна регулярка и вообще такая обработка строки если данные статичны? Не понял


Данные динамичные, почему вы решили, что они статичные?

Цитата:

приведенная выше регулярка нарушает полином. если это какие то работы с полиномами... то вид полинома до -24x+1a-6xy-11b-10 и после -24x+a-6xy-b-10 - нарушает его целостность.


А вот это да, я не учла...
Нужно тогда, чтобы регулярное выражение искала одну 1-цу перед которой не стоят другие цифры и после которой идут только буквы.
Это возможно?

(Отредактировано автором: 07 Ноября, 2016 - 08:27:06)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB