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
Форумы портала PHP.SU :: Версия для печати :: Помогите составить регулярное выражение
Форумы портала PHP.SU » » Вопросы новичков » Помогите составить регулярное выражение

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

1. Cajka - 05 Ноября, 2016 - 13:04:13 - перейти к сообщению
Не могу правильно составить регулярное выражение.

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

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

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


Нужные подстроки находит, но при замени захватывает и буквы после 1-цы.
2. Мелкий - 05 Ноября, 2016 - 15:16:05 - перейти к сообщению
Cajka пишет:
заменить все 1 перед которыми стоят буквы

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

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

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

либо lookahead'ом их не включать в совпадение:
3. Fart - 05 Ноября, 2016 - 15:43:11 - перейти к сообщению
ув. Мелкий:

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

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

Спойлер (Отобразить)
4. Cajka - 05 Ноября, 2016 - 15:45:54 - перейти к сообщению
Мелкий, нужно заменить 1-цу после которой идут буквы.
(Добавление)
Fart, 1-цы вообще не должно быть после обработки.
5. Fart - 05 Ноября, 2016 - 16:01:51 - перейти к сообщению
пример внимательно смотрите 11 и 1... 11 убрать?? как и 1??
6. Строитель - 05 Ноября, 2016 - 16:01:55 - перейти к сообщению
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.  
7. Fart - 05 Ноября, 2016 - 16:02:53 - перейти к сообщению
Строитель

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

такой пример
(Добавление)
Cajka мой пример внимательно смотрите 11 и 1 убрать совместно?)))
8. Строитель - 05 Ноября, 2016 - 16:06:38 - перейти к сообщению
Fart
Fart пишет:
$answer = '-24x+11a-6xy-11b-10';
В этом варианте будет отброшена только первая цифра.
9. Fart - 05 Ноября, 2016 - 16:14:46 - перейти к сообщению
ну так а надо же 1b = b, 11b = 11b, 1b != 11b
10. Строитель - 05 Ноября, 2016 - 16:51:15 - перейти к сообщению
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
11. Cajka - 05 Ноября, 2016 - 17:44:25 - перейти к сообщению
Про 11 вообще не было речи. Просто надо найти 1 перед набором букв и удалить ее, все.
12. Строитель - 05 Ноября, 2016 - 18:04:13 - перейти к сообщению
Cajka, тогда оба моих варианта вам подойдут.
13. Cajka - 06 Ноября, 2016 - 06:09:34 - перейти к сообщению
[quote=Строитель][/quote], спасибо. Сегодня протестирую и отпишусь.
14. Fart - 06 Ноября, 2016 - 14:01:37 - перейти к сообщению
тогда такой вопрос:

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

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

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

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

в результате несложно догадаться что происходит с полиномами, а о конечном равенстве после обработки вообще речи не пойдет?
15. Cajka - 07 Ноября, 2016 - 08:12:00 - перейти к сообщению
[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-цу перед которой не стоят другие цифры и после которой идут только буквы.
Это возможно?

 

Powered by ExBB FM 1.0 RC1